C#Task.Run()停止工作并永远等待

C#Task.Run()停止工作并永远等待,c#,task,C#,Task,我使用一个用C#编写的服务器端应用程序,执行一个简单的任务 { ... Task.Run(() => DeleteFile(path)); ... } 它工作了很多年,但从昨天起就停止了工作,并且根本没有调用DeleteFile方法。执行只会继续到下一行代码。我尝试了Task.Run(()=>File.Delete(path)),但效果不佳。然后我添加了Task.Wait,如下所示(带有一个空操作-仅用于测试): 当执行到达t.Wait()时,它将永远等待,不会转到下一行代码 我在应用程

我使用一个用C#编写的服务器端应用程序,执行一个简单的
任务

{
...
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();