了解与WebClient UploadString()vs UploadStringTaskAsync的异步

Ben*_* E. 2 .net c# asynchronous task-parallel-library async-await

当它在非可视上下文中运行时,我很难理解异步vs同步的好处,例如Azure Worker或Web Api控制器:

using (var wc = new WebClient())
{
    wc.UploadString(uri, message);
    // vs.
    await wc.UploadStringTaskAsync(uri, message);
}
Run Code Online (Sandbox Code Playgroud)

主线程是否需要等待,因此它对性能没有影响?除了UI工作之外还有什么?

Yuv*_*kov 5

主线程是否需要等待,因此它对性能没有影响?除了UI工作之外还有什么?

例如,当您使用Web API时,ASP.NET线程池会为您提供一个执行代码的线程.当您await使用异步方法时,您将该线程释放回池中以允许处理更多连接.异步方法将控制权交还给调用方法(或者如果它是一个顶层处理程序,则返回到线程池),现在该线程可以自由地处理更多工作.在同步版本中,您只是阻塞线程,直到IO完成.

这样,即使不涉及UI,您也可以通过允许您同时处理更多工作的方式来提高应用程序的响应速度.