在测试一些实现选项时,我偶然发现了一些关于 TPL 的不清楚的问题。基本上我的问题是,当调用异步任务返回方法时,是否创建了任务?在下面的代码中,会发生什么?
public static void Main(string[] args){
Task t = SomeAsyncMethod()
Task.WaitAll(t)
}
private static async Task<IEnumerable<string>> SomeAsyncMethod()
{
//some implementation
}
我假设应该在这段代码中创建一个任务,但是在查看并行任务调试窗口时没有创建任务。请你澄清一下。
更新:svick 对上述情况给出了很好的解释,这产生了一个后续问题。下面的代码会创建两个任务还是只创建一个?当主要目标是创建单独的任务时,这是一种好的做法。:
public static void Main(string[] args) {
Task t = Task.Factory.StartNew(SomeAsyncMethodWrapper());
}
private async void SomeAsyncMethodWrappe(){
ver result = await AsyncMethod();
//do something with the result
}
private static async Task<IEnumerable<string>>(){
//do some work and return a result value
var innerResult = await someLibraryAsyncMethod();
return innerResult;
}