C# 无法捕获异步/等待任务异常
我有一个用火忘却的方法(它是为了传统的目的而存在的) 我不想等待C# 无法捕获异步/等待任务异常,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我有一个用火忘却的方法(它是为了传统的目的而存在的) 我不想等待后台工作人员。运行。这是我的班级 public class BackgroundWorker { public static Task Run(Action action) { return new IISBackgroundTask().DoWorkAsync(action); } class IISBackgroundTask : IRegisteredObject
后台工作人员。运行。这是我的班级
public class BackgroundWorker
{
public static Task Run(Action action)
{
return new IISBackgroundTask().DoWorkAsync(action);
}
class IISBackgroundTask : IRegisteredObject
{
public IISBackgroundTask()
{
HostingEnvironment.RegisterObject(this);
}
void IRegisteredObject.Stop(bool immediate)
{
if (_task.IsCompleted || _task.IsCanceled || _task.IsFaulted || immediate)
{
HostingEnvironment.UnregisterObject(this);
}
}
public async Task DoWorkAsync(Action action)
{
try
{
_task = Task.Run(action);
await _task;
}
catch (AggregateException ex)
{
// Log exceptions
foreach (var innerEx in ex.InnerExceptions)
{
Logger.Log(innerEx);
}
}
catch (Exception ex)
{
Logger.Log(ex);
}
}
private Task _task;
}
}
我无法捕捉异常
更新:如果我在BackgroundWorker.Run添加wait,那么它会工作,但我想启动并忘记。现在我已经用
public void DoWork(Action action)
{
_task = Task.Run(() =>
{
try
{
action();
}
catch (AggregateException ex)
{
foreach (var innerEx in ex.InnerExceptions)
{
Logger.Log(innerEx);
}
}
catch (Exception ex)
{
Logger.Log(ex);
}
});
}
哪种异常,请发布异常信息?@KimKulling Null exception at//我的代码在这里抛出一个错误
“Fire and forget”字面意思是“我不关心异常”。@StephenCleary我的意思是让我的客户尽快得到响应,并在后台运行一些代码。我也知道你的库,但现在我想知道它为什么不工作。问题中的代码将捕获从操作
引发的异常。除非您使用的是async void
,否则这将起作用。
public void DoWork(Action action)
{
_task = Task.Run(() =>
{
try
{
action();
}
catch (AggregateException ex)
{
foreach (var innerEx in ex.InnerExceptions)
{
Logger.Log(innerEx);
}
}
catch (Exception ex)
{
Logger.Log(ex);
}
});
}