首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 8 RestSharp请求。异步/等待

Windows 8 RestSharp请求。异步/等待
EN

Stack Overflow用户
提问于 2015-01-20 10:43:09
回答 2查看 185关注 0票数 0

我知道它被要求很多,但我的问题是,我的方法不会等待请求完成,尽管我已经实现了一个TaskCompletionSource,它应该完成这项工作,但它没有。

代码语言:javascript
复制
public DecksViewModel(bool local)
{
    DList = new List<Deck>();

    if (local)
        InitializeLocalDeckList();
    else
    {
        Dereffering();
    }
}

public async void Dereffering()
{
    var e = await InitilaizeWebDeckList();
    List<DeckIn> decksIn = JsonConvert.DeserializeObject<List<DeckIn>>(e);
    foreach (DeckIn d in decksIn)
    {
        Deck dadd = new Deck();
        dadd.CardCount = 0;
        dadd.Name = d.name;
        dadd.PicturePath = d.image;
        dadd.InstallDirectory = false;
        DList.Add(dadd);
    }

    DataSource = AlphaKeyGroup<Deck>.CreateGroups(DList, System.Threading.Thread.CurrentThread.CurrentUICulture, (Deck s) => { return s.Name; }, true);
}

public Task<String> InitilaizeWebDeckList()
{
    var tcs = new TaskCompletionSource<string>();
    var client = new RestClient("blabla.com");
    var request = new RestRequest("");
    request.AddHeader("Authorization", "Basic blabla");
    client.ExecuteAsync(request, response =>
    {
        test = response.Content;
        tcs.SetResult(response.Content);


    });
    return tcs.Task;
}

因此,当我调用DecksViewModel构造函数时,我会异步地尝试从when服务器请求数据并填充模型。关键是,对应的视图“不等待”请求填充模型,因此显示为空。我用

代码语言:javascript
复制
List<AlphaKeyGroup<Deck>> DataSource 

通过LongListSelector填充DataBinding。但是当DataSource被绑定时,它还没有被设置。我希望你能帮上忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 10:51:57

您正在调用一个异步方法,而没有在构造函数中等待它。这就是为什么“它不等待”(因为它没有什么可等待的)。

由于这个原因,在构造函数中调用async方法通常是个坏主意,再加上构造函数不能是async的事实。

您应该相应地重新设计您的解决方案。一个选项是拥有一个async静态方法,该方法创建一个实例,并使await的过程:

代码语言:javascript
复制
public static async Task CreateInstance(bool local)
{
    var model = new DecksViewModel();
    if (local)
    {
        await InitializeLocalDeckList();
    }
    else
    {
        await Dereffering();
    }
}

这将允许您不使用async void,它只应该在UI甚至处理程序中使用。

您可以在斯蒂芬·克利里的博客中阅读更多有关其他选项的内容。

票数 3
EN

Stack Overflow用户

发布于 2015-01-20 10:56:54

您正在使用异步空,这意味着没有人会等待它。它只是火和忘记。

我在这里看到了异步关键字中的一些误解:如果使用wait,您的代码只会等待异步方法的结果。否则,该调用将只启动异步方法,但您不知道它何时实际运行。

但是,不能在构造函数中使用await。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28043297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档