Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上次。wait正在使用线程吗?_C#_Asynchronous_Synchronization_Task_Async Await - Fatal编程技术网

C# 上次。wait正在使用线程吗?

C# 上次。wait正在使用线程吗?,c#,asynchronous,synchronization,task,async-await,C#,Asynchronous,Synchronization,Task,Async Await,我以前见过一些类似的问题,只是想澄清一下 在中,异步调用称为“没有线程” 但据说, 然而,在这里,我们运行回调来更新 TextBox1位于任意线程上,任务并行库 (TPL)实施ContinueWith恰巧说了一句 此外,在某些情况下,当我在项目中调用ContinueWith时,我还得到了“跨线程访问异常” 那么,谁是对的 答:多亏了i3arnon。在仔细阅读了第一篇文章之后,我找到了这个地方 因此,我们看到在请求进行时没有线程。 当请求完成时,不同的线程被“借用”或被删除 工作会短暂地排到他们的

我以前见过一些类似的问题,只是想澄清一下

在中,异步调用称为“没有线程”

但据说,

然而,在这里,我们运行回调来更新 TextBox1位于任意线程上,任务并行库 (TPL)实施ContinueWith恰巧说了一句

此外,在某些情况下,当我在项目中调用ContinueWith时,我还得到了“跨线程访问异常”

那么,谁是对的

答:多亏了i3arnon。在仔细阅读了第一篇文章之后,我找到了这个地方

因此,我们看到在请求进行时没有线程。 当请求完成时,不同的线程被“借用”或被删除 工作会短暂地排到他们的队伍中。这项工作通常是按 毫秒左右(例如,线程池上运行的APC)下降到 微秒左右(例如,ISR)。但没有线程 已阻止,正在等待该请求完成


两者都是。当你的CPU上运行代码时,总是有一个线程在运行它。问题是当你没有代码运行时会发生什么,例如当你等待IO操作完成时

如果使用
async wait
,则不会有线程空闲地等待该操作完成,并且只有完成后,才会给线程(通常由
线程池
提供)以继续在CPU上运行代码

如果不使用
async wait
(或不同的异步范例,如
Begin-End
),则在整个操作过程中,甚至在操作的IO部分,都会保留一个线程,这是一种资源浪费



需要补充的是,尽管大多数异步示例都涉及IO操作,但情况并非总是如此。在某些情况下,处理CPU限制的操作是合理的(在整个操作中,您确实持有一个线程)异步。

两者都是。当您的CPU上运行代码时,总是有一个线程在运行它。问题是当您没有代码运行时,例如当您等待IO操作完成时会发生什么

如果使用
async wait
,则不会有线程空闲地等待该操作完成,并且只有完成后,才会给线程(通常由
线程池
提供)以继续在CPU上运行代码

如果不使用
async wait
(或不同的异步范例,如
Begin-End
),则在整个操作过程中,甚至在操作的IO部分,都会保留一个线程,这是一种资源浪费



需要补充的是,尽管大多数异步示例都涉及IO操作,但情况并非总是如此。在某些情况下,处理CPU限制的操作是合理的(在整个操作中,您确实持有一个线程)异步。

但是..我认为默认情况下,
await
不使用线程,这对IO很有用。如果我有一些计算要做,我使用的是
await Task.Run()
用于在另一个线程中进行异步计算。@vitalivasylenko wait本身没有什么作用。它只将下一行代码注册为一个延续。这意味着在等待时您没有使用线程,但在等待执行完其余代码后确实需要一个线程。@vitalivasylenko Tash.Run将启动一个CPU boun在上一部分中,我提到了异步CPU绑定操作。@Vitalivasylenko在获得IO操作完成的信号和将相关任务标记为完成并产生结果之间,有一些代码。可能代码不多,但需要一些线程来完成运行它。非常感谢,现在我得到了i。但是..我认为默认情况下,
await
不使用线程,这对IO很有用。如果我有一些计算要做,我使用的是
await Task.run()
用于在另一个线程中进行异步计算。@vitalivasylenko wait本身没有什么作用。它只将下一行代码注册为一个延续。这意味着在等待时您没有使用线程,但在等待执行完其余代码后确实需要一个线程。@vitalivasylenko Tash.Run将启动一个CPU boun在上一部分中,我提到了异步CPU绑定操作。@Vitalivasylenko在获得IO操作完成的信号和将相关任务标记为完成并产生结果之间,有一些代码。可能代码不多,但需要一些线程来完成运行它。非常感谢,现在我知道了。