我试图了解异步编程,但我有一个问题。关于以下的功能。

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的文章。


  还是不保证会创建任何新线程?


这不会创建任何新线程。特别是asyncawait本身不会创建任何新线程。

在ASP.NET上,await之后的代码可能会在与该await之前的代码不同的线程上运行。不过,这只是将一个线程交换为另一个线程。没有创建新线程。


  在那种情况下,DoSomethingAsync调用仅在处理某些外部资源时才有意义吗?


async的主要用例是处理I / O,是的。在ASP.NET上尤其如此。

09-10 10:33