假设我只希望在async
中运行一种方法。
所以我有一个如下的async
方法:
public async Task Load(){
Task task1 = GetAsync(1);
Task task2 = GetAsync(2);
Task task3 = GetAsync(3);
var data1 = await task1; // <--Freezes here when called from GetSomethingElse()
var data2 = await task2;
var data3 = await task3;
..process data..
}
然后我试图在另一个方法中将那个async
方法作为任务调用,并希望它等待直到那个特定的async
代码完成。问题是它没有完成。当它到达Load()
中的第一个await
时,它就停止加载了。调试器变空并且没有其他错误。像这样从非
async
方法中调用async
方法是否可行?我有一个理由不需要让这个特定任务成为async
,但是Load()
函数需要成为async
。public void GetSomethingElse(){
var task1 = Load().Wait();
}
这怎么可能?
我甚至尝试改变Load()
方法,使用var data = task1.Wait()
等而不是await
,但无论我如何尝试都没有任何区别。如果有人能帮忙,将不胜感激。
var data1 = await Task.Run(() => GetAsync(1));
- John Woovar data1 = task1.Wait();
,按照你的方式做会有什么不同吗? - Control FreakGetSomethingElse()
中使用了你的建议,现在它可以正常工作了。如果你想回答这个问题,我会接受的。顺便说一下,谢谢你。 - Control FreakTask.Run
在不同的线程中运行是为了避免同步上下文,这只是一个解决方法。请参考我的回答... - i3arnon