C# 如何理解非IO绑定的异步代码
我在理解异步代码如何用于非IO操作方面存在差距。C# 如何理解非IO绑定的异步代码,c#,.net,asynchronous,C#,.net,Asynchronous,我在理解异步代码如何用于非IO操作方面存在差距。 对于IO,很明显没有创建线程,因为IO操作由网卡、HDD或其他东西控制。但是当我有一些长时间运行的方法时,我需要将其设置为Task.Run({method}),但是Task.Run()实际上是从池中创建/重新使用一个线程,在我看来执行是并行的-主线程和线程池线程,即使是纯CPU绑定的情况,异步/等待仍然有用: 并非所有的线程都是相等的;在客户端应用程序中,当其他工作在后台继续进行时,将UI线程释放回绘制和响应事件循环事件等工作是非常有益的;这可
对于IO,很明显没有创建线程,因为IO操作由网卡、HDD或其他东西控制。但是当我有一些长时间运行的方法时,我需要将其设置为Task.Run({method}),但是Task.Run()实际上是从池中创建/重新使用一个线程,在我看来执行是并行的-主线程和线程池线程,即使是纯CPU绑定的情况,
异步
/等待
仍然有用:
- 并非所有的线程都是相等的;在客户端应用程序中,当其他工作在后台继续进行时,将UI线程释放回绘制和响应事件循环事件等工作是非常有益的;这可以通过多种方式实现,其中之一是:
/async
;或者,某些线程可能具有不同的优先级wait
- 有时,您可以有效地并行化工作,无论是在工作线程执行工作时计算其他内容,还是在多个线程之间分割单个工作;在任何一种情况下,
/async
都可以用于协调(“连接”)这些操作await
- 但是:如果这些场景不适用,并且您将线程间的工作推送到
it(不同时执行任何其他操作,也不需要任何特殊的线程条件),那么您只需要使用await
/async
await
异步
/等待
仍然有用:
- 并非所有的线程都是相等的;在客户端应用程序中,当其他工作在后台继续进行时,将UI线程释放回绘制和响应事件循环事件等工作是非常有益的;这可以通过多种方式实现,其中之一是:
/async
;或者,某些线程可能具有不同的优先级wait
- 有时,您可以有效地并行化工作,无论是在工作线程执行工作时计算其他内容,还是在多个线程之间分割单个工作;在任何一种情况下,
/async
都可以用于协调(“连接”)这些操作await
- 但是:如果这些场景不适用,并且您将线程间的工作推送到
it(不同时执行任何其他操作,也不需要任何特殊的线程条件),那么您只需要使用await
/async
await
async
/await
与线程无关;如果您使用Task.Run
,则:是;这也不意味着它不能仍然有用!你的问题是什么?到目前为止你写的没有错…同意,看起来你理解得很好。我的问题是-为什么人们说异步代码不使用任何其他线程?我在Internet上看到的所有示例都是关于文件、HttpClient异步方法的。也许它们只意味着IO绑定的任务。@NickReshetinsky,那是因为它是泛化的东西;在许多(大多数?)情况下,async
/await
与线程无关;如果您使用Task.Run
,则:是;这也不意味着它不能仍然有用!