C# “发行”有什么价值吗;“等待”;在从线程池启动的任务中
很明显,使用“wait”从UI线程中卸载任务是一件很棒的事情——UI线程可以重新处理Windows消息 但假设您使用Task.Run启动了等待的任务,它将在线程池中的线程上启动代码。在该代码中执行“等待”有什么价值(技术上可以做到吗?) 我很想说“不”。为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么 现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续 迈克尔 从技术上讲,这甚至可以做到吗 对。由于没有当前的C# “发行”有什么价值吗;“等待”;在从线程池启动的任务中,c#,.net,asynchronous,tap,ctp,C#,.net,Asynchronous,Tap,Ctp,很明显,使用“wait”从UI线程中卸载任务是一件很棒的事情——UI线程可以重新处理Windows消息 但假设您使用Task.Run启动了等待的任务,它将在线程池中的线程上启动代码。在该代码中执行“等待”有什么价值(技术上可以做到吗?) 我很想说“不”。为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么 现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续 迈克尔 从技术上讲,这甚至可以做到吗
SynchronizationContext
,因此生成的延续将在(可能)不同的线程池线程上运行。然而,该机制运行良好
该代码中是否有执行“等待”的值
是的,有。见下文
为什么要从线程池线程中卸载工作——除了处理分配给它的原始任务之外,它还必须做什么
您可以释放线程来做其他工作。线程池线程是一种有限的资源
现在,如果有人回答说如果我进行等待,线程池线程实际上可以“释放”到池中并在其他地方使用,我会非常感动,而我的异步工作仍在继续
是的,事实上就是这样
除了能够释放任务外,这样做还有另一个巨大的优势——无论您是在线程池上还是在具有同步上下文的线程上,都可以使用相同的方法和相同的代码。重用相同代码的能力也是非常有价值的