【发布时间】:2019-11-30 09:37:03
【问题描述】:
我在我们的生产代码库中看到了一些遵循如下模式的奇怪代码。我想知道调用Start() 与直接运行同步代码对性能有何影响。尤其是在这种情况下如何管理任务或线程。
public Task RunLongTask(){
return Task.Run(()=>{
// Run some Synchronous long IO process
}
}
public void Start(){
RunLongTask().Wait();
}
我的想法是否正确,即在等待同步 IO 调用完成时会阻止一项任务。并且RunLongTask() 的来电者也将被阻止。本质上是直接运行同步代码的成本翻倍。由于双重阻塞,在这种情况下是否总是会创建 2 个线程?
【问题讨论】:
-
您有
IO或其他任何调用此RunLongTask的线程吗? -
你有什么样的应用程序?是 asp.net 还是桌面还是别的什么?
-
@prhmma 我看到它是从同一个线程和另一个线程调用的。看起来用户试图强制调用同步,因为 Task.Run 是自动调用的。
-
@roverred 在 asp.net 核心中没有任何 SynchronizationContext -> blog.stephencleary.com/2017/03/…
标签: c# asynchronous task