c# - 异步/等待与线程

标签 c# .net multithreading async-await

在 .Net 4.5 中,Microsoft 添加了新的 Async/Await 功能以简化异步编码。但是,我想知道

  1. Async/Await能否完全替代旧的使用方式 线程?
  2. Async/Await 是否能够执行 Thread 可以执行的任何操作 异步?
  3. Async/Await 能否仅与 WebClient.DownloadStringAsync 等方法一起使用,或者我能否转换任何同步方法以使其使用 Async/Await 而不是阻塞主线程?

最佳答案

can it completely replace the old way of using Threads ?

没有。一个线程可以做很多更有用的事情。 Await 专门用于处理需要时间的事情,最典型的是 I/O 请求。传统上,这是在 I/O 请求完成时通过回调完成的。编写依赖于这些回调的代码非常困难,await 大大简化了它。

capable of doing what ever a Thread can do asynchronously ?

大致上。 Await 只负责处理延迟,它不会做任何线程所做的事情。 await 表达式,位于 await 关键字右侧,用于完成工作。理想情况下,它根本不使用线程,它发布一个驱动程序请求,一旦驱动程序完成数据传输,它就会生成一个完成通知回调。网络是迄今为止最常见的用法,数百毫秒的延迟是常见的,并且是服务从桌面或 LAN 迁移到“云”的不可避免的副作用。同步使用此类服务​​会使 UI react 迟钝。

only can be used with some methods like WebClient.DownloadStringAsync

没有。您可以将它与任何返回任务的方法一起使用。 XxxxAsync() 方法只是 .NET 框架中用于需要时间的常见操作的预制方法。就像从 Web 服务器下载数据一样。

关于c# - 异步/等待与线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148852/

相关文章:

.net - 无法加载文件或程序集 'Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或其依赖项之一

c# - 使用 LINQ 语法帮助需要

java - volatile 变量的读-修改-写操作如何保证线程安全

c++ - 如何通过 std::call_once 使用重载函数

c# - LINQ查询获取两条记录的公交车号码

c# - 在 WPF 中获取 TreeViewItem 的 Header 的高度

c# - 如何处理PDF文档?

.net - 为什么 Task.Delay() 允许无限延迟?

.net - 在.NET中,调用堆栈是否与线程紧密地联系在一起?

c# - Windows 服务应如何从自定义命令返回信息