我试图了解异步编程,但我有一个问题。关于以下的功能。
public async void TestAsyncCall() {
Task<string> TaskResult1 = DoSomethingAsync();
string Result2 = DoSomething();
string Result1 = await TaskResult1;
}
public string DoSomething() {
return "synch";
}
public async Task<string> DoSomethingAsync() {
await Task.Delay(10000);
return "asynch";
}
在函数调用TestAsyncCall()中,将使用一个线程执行DoSomethingAsync(),而使用另一个线程执行DoSomething()吗?
然后,当遇到await时,它将等待DoSomethingAsync()完成并释放该线程(同时也不阻塞原始线程)吗?
还是不保证会创建任何新线程?在那种情况下,DoSomethingAsync调用仅在处理某些外部资源时才有意义吗?
最佳答案
我建议您阅读有关async
ASP.NET的文章。
还是不保证会创建任何新线程?
这不会创建任何新线程。特别是async
和await
本身不会创建任何新线程。
在ASP.NET上,await
之后的代码可能会在与该await
之前的代码不同的线程上运行。不过,这只是将一个线程交换为另一个线程。没有创建新线程。
在那种情况下,DoSomethingAsync调用仅在处理某些外部资源时才有意义吗?async
的主要用例是处理I / O,是的。在ASP.NET上尤其如此。