Mar*_*ark 5 .net c# task-parallel-library windows-error-reporting
我有一些复杂的功能,这些功能在Task通过TPL生成的异步程序中运行,有时可能会以意外的方式失败。当发生此类故障时,这表示可能导致程序状态损坏的编程错误。因此,我不希望我的程序捕获异常,对其进行处理并“套用”,我希望我的进程崩溃并终止。
我还希望事情以Windows错误报告系统将其检测为崩溃的方式消亡,并进行所有有用的调试,例如捕获小型转储,将其发送给Microsoft等。
我知道这可能与您对程序在错误情况下应执行的操作的看法背道而驰,但问题不在于此。
我的问题是,由于任务引发异常,因此不会立即导致进程崩溃。一段时间后,当垃圾收集器明智地决定收集“未观察到”的异常时,它崩溃了。
我希望该过程立即崩溃,因为...
简而言之,问题是:
如何使我的进程从Task使用TPL创建的async崩溃,从而Windows错误报告能够创建有用的小型转储?
提前致谢!
你可以尝试这个,或者类似的东西:
\n\npublic static Task FailFastOnException(this Task task) \n{ \n task.ContinueWith(c => Environment.FailFast(\xe2\x80\x9cTask faulted\xe2\x80\x9d, c.Exception), \n TaskContinuationOptions.OnlyOnFaulted | \n TaskContinuationOptions.ExecuteSynchronously | \n TaskContinuationOptions.DetachedFromParent); \n return task; \n}\nRun Code Online (Sandbox Code Playgroud)\n\n进而:
\n\nvar t = Task.Factory.StartNew(\xe2\x80\xa6).FailFastOnException();\nRun Code Online (Sandbox Code Playgroud)\n\n我们刚刚在“即发即忘”任务中经常使用它,如果这些任务由于某种原因失败,我们希望取消该流程。
\n\n摘自 Stephen Toub 撰写的博客文章:\n http://blogs.msdn.com/b/pfxteam/archive/2009/05/31/9674669.aspx
\n| 归档时间: |
|
| 查看次数: |
545 次 |
| 最近记录: |