Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# “发行”有什么价值吗;“等待”;在从线程池启动的任务中_C#_.net_Asynchronous_Tap_Ctp - Fatal编程技术网

C# “发行”有什么价值吗;“等待”;在从线程池启动的任务中

C# “发行”有什么价值吗;“等待”;在从线程池启动的任务中,c#,.net,asynchronous,tap,ctp,C#,.net,Asynchronous,Tap,Ctp,很明显,使用“wait”从UI线程中卸载任务是一件很棒的事情——UI线程可以重新处理Windows消息 但假设您使用Task.Run启动了等待的任务,它将在线程池中的线程上启动代码。在该代码中执行“等待”有什么价值(技术上可以做到吗?) 我很想说“不”。为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么 现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续 迈克尔 从技术上讲,这甚至可以做到吗

很明显,使用“wait”从UI线程中卸载任务是一件很棒的事情——UI线程可以重新处理Windows消息

但假设您使用Task.Run启动了等待的任务,它将在线程池中的线程上启动代码。在该代码中执行“等待”有什么价值(技术上可以做到吗?)

我很想说“不”。为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么

现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续

迈克尔

从技术上讲,这甚至可以做到吗

对。由于没有当前的
SynchronizationContext
,因此生成的延续将在(可能)不同的线程池线程上运行。然而,该机制运行良好

该代码中是否有执行“等待”的值

是的,有。见下文

为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么

您可以释放线程来做其他工作。线程池线程是一种有限的资源

现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续

是的,事实上就是这样

除了能够释放任务外,这样做还有另一个巨大的优势——无论您是在线程池上还是在具有同步上下文的线程上,都可以使用相同的方法和相同的代码。重用相同代码的能力也是非常有价值的