我正在为我的项目使用此异步代码:
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:等待激活,方法:“”,结果:“”。 我知道这是因为死锁异步。
请帮我解决我的问题。
答案 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;
}