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);
                }
            });
        }