[英]Unable to catch async/await Task exception
我有一種解雇方法(用於遺留目的),
BackgroundWorker.Run(() => {
// my code here that throws an error
});
我不想等待BackgroundWorker.Run
。 這是我的課,
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);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.