task.run和CLR异步方法之间的区别



请告诉我,这两种方法有什么区别?他们是否会运行async?在单词 await之后的流中会做什么?

public async Task<ActionResult> RunAsync()
{
   var client = new WebClient();
   await client.DownloadDataAsync(someUri);
   return _jsonDataResult;
}

public async Task<ActionResult> RunAsync()
{
   var client = new WebClient();
   await Task.Run(()=> 
   {
      client.DownloadData(someUri);
   });
   return _jsonDataResult;
}

使用第二种方法是否有意义?

请告诉我,这两种方法有什么区别?

第一个人不同步下载一些数据。第二个同步下载一些数据(阻止线程池线程直到下载完成)。

他们是否会运行异步?

好吧,这取决于您对"异步"的定义。我要说的是,第一个是"真正的异步",第二个是"假异步"。

,在等待单词之后的流中会做什么?

是的,不确定这个问题甚至意味着什么。流已经在那时已经读取。

使用第二种方法是有意义的吗?

否,除非您遇到同步执行的问题。例如,DNS查找可能会很慢,即使是通过异步API(设计错误IMO),它们通常同步完成。

最新更新