当我在线程处理中遇到异常时,我遇到了问题。我的代码如下:
Task.Factory.StartNew(() => ComputeBackgroundAdjudicationTask(taskId, ComputeBackgroundAdjudication));
ComputeBackgroundAdjudicationTask方法如下:
private void ComputeBackgroundAdjudicationTask(long taskId, Action<int> completedAdjudicationJobHandler)
{
//My Logic
completedAdjudicationJobHandler(1);
}
现在我面临的问题是在我的逻辑假设一些异常即将到来我想登录到一些文本文件。 在网上搜索后,我发现一些答案如下。
Task.Factory.StartNew(() =>ComputeBackgroundAdjudicationTask(taskId, ComputeBackgroundAdjudication))
.ContinueWith(
task =>
{
if (task.Exception != null)
task.Exception.Handle(ex =>
{
System.IO.File.AppendAllText(@"C://test.txt", "Error:" + ex.Message + "\r\n");
return true;
});
}, TaskContinuationOptions.OnlyOnFaulted
);
现在它正在登录到文本文件。登录到文本文件后,线程不再启动。请帮我解决这个问题。
提前致谢。
最佳答案
在您的示例中,异常终止任务/线程,然后您记录线程终止的原因。
看来你要找的更多是这样的:
private void ComputeBackgroundAdjudicationTask(long taskId, Action<int> completedAdjudicationJobHandler)
{
while(true) {
try {
//My Logic
completedAdjudicationJobHandler(1);
}
catch(Exception ex) {
System.IO.File.AppendAllText(@"C://test.txt", "Error:" + ex.ToString() + "\r\n");
}
}
}
但这似乎是 completedAdjudicationJobHandler 所做的一切设计都不是很好。
我想补充一点:如果任何抛出异常的东西都会抛出异常,这会导致无限循环。
编辑 2016-01-07:可能我又误解了想要的效果。据我了解,最后一条评论你想做写在//MyLogic 位置的事情,无论它们是失败还是成功,都需要 completedAdjudicationJobHandler(1);执行。在这种情况下,代码示例为:
private void ComputeBackgroundAdjudicationTask(long taskId, Action<int> completedAdjudicationJobHandler)
{
try {
//My Logic
}
catch(Exception ex) {
System.IO.File.AppendAllText(@"C://test.txt", "Error:" + ex.ToString() + "\r\n");
}
finally {
completedAdjudicationJobHandler(1);
}
}
关于c# - 处理 Task.Factory.StartNew 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635071/