2017-03-08 83 views
0

我有火和忘记方法(它是为传统用途),无法赶上异步/ AWAIT任务异常

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等待,那么它会工作,但我想火,忘了。

+0

哪一种例外的,你能不能请张贴异常信息? – KimKulling

+0

@KimKulling在'//我的代码在这里抛出一个错误'的空异常' – user960567

+0

“Fire and ** forget **”字面意思*表示*“我不在乎异常”。 –

回答

1

现在我使用它有固定的,

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