任务状态始终等待激活

时间:2013-11-26 05:15:18

标签: c# asynchronous asp.net-web-api

我正在为我的项目使用此异步代码:

public async Task<IEnumerable<Area>> GetAreas()
{

        var webclient = new WebClient();
        var result = await webclient.DownloadStringTaskAsync(new Uri(uri)).ConfigureAwait(false);

        return JsonConvert.DeserializeObject<IEnumerable<Area>>(result);
}


public async Task<ActionResult> Index()
    {
        var areas = GetAreas();
        Task.WaitAll(areas);
        return View(model: areas);
    }

我已经尝试了this但是当我调试我的程序区域时,变量具有以下属性: status:等待激活,方法:“”,结果:“”。 我知道这是因为死锁异步。

请帮我解决我的问题。

1 个答案:

答案 0 :(得分:0)

这个怎么样:

public Task<ActionResult> Index()
{
    var tcs = new TaskCompletionSource<ActionResult>();
    GetAreas().ContinueWith(t => 
    {
      if(t.IsCancelled)
        tcs.SetCancelled();
      else if(t.IsFaulted)
        tcs.SetException(t.Exception);
      else
        tcs.SetResult(new View(model: t.Result); 
    });
    return tcs.Task;
}