C#Task.Run()停止工作并永远等待
我使用一个用C#编写的服务器端应用程序,执行一个简单的C#Task.Run()停止工作并永远等待,c#,task,C#,Task,我使用一个用C#编写的服务器端应用程序,执行一个简单的任务 { ... Task.Run(() => DeleteFile(path)); ... } 它工作了很多年,但从昨天起就停止了工作,并且根本没有调用DeleteFile方法。执行只会继续到下一行代码。我尝试了Task.Run(()=>File.Delete(path)),但效果不佳。然后我添加了Task.Wait,如下所示(带有一个空操作-仅用于测试): 当执行到达t.Wait()时,它将永远等待,不会转到下一行代码 我在应用程
任务
{
...
Task.Run(() => DeleteFile(path));
...
}
它工作了很多年,但从昨天起就停止了工作,并且根本没有调用DeleteFile方法。执行只会继续到下一行代码。我尝试了Task.Run(()=>File.Delete(path))
,但效果不佳。然后我添加了Task.Wait
,如下所示(带有一个空操作-仅用于测试):
当执行到达t.Wait()
时,它将永远等待,不会转到下一行代码
我在应用程序中使用Task.Run的其他位置正常工作
原因可能是什么?可能是你的锁死了。请参阅此链接。您需要真正知道何时调用.Wait().Result().Run()
,这三个函数可能会使整个应用程序崩溃 请共享删除文件代码…我不认为这是一个问题。请等待它,而不是使用t.Wait()
。Wait()
永远等待,因为您是。您原来的fire and forget版本很可能已停止工作,因为它现在生成了一个异常。您是否绝对确定没有调用DeleteFile
,而其中的某些内容失败了?接下来要看的是“同步上下文”——您的服务器是否有同步上下文?也许有人加了一个?SynchronizationContext.Current
报告了什么?@GSerg调用Wait()
是一个糟糕的主意,但它实际上不应该让它失败,除非出现同步上下文死锁(或类似情况);这不是对.Wait()
的认可,请注意!
Task t = Task.Run(() => {});
t.Wait();