2017-03-08 3 views
0

fangen habe ich ein Feuer und vergessen Verfahren (seine dort für Legacy-Zwecke),kann nicht async/await Aufgabe Ausnahme

BackgroundWorker.Run(() => { 
      // my code here that throws an error       
}); 

Ich möchte nicht BackgroundWorker.Run erwarten. Hier ist meine Klasse,

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

Ich bin nicht in der Lage, Ausnahme zu fangen.

Update: Wenn ich hinzufügen, erwarten bei BackgroundWorker.Run dann wird es funktionieren, aber ich möchte Feuer und vergessen.

+0

Welche Art von Ausnahme verwenden, fest, könnten Sie die Ausnahme Informationen hinterlassen bitte? – KimKulling

+0

@KimKulling Null Ausnahme bei '// mein Code hier, der einen Fehler' – user960567

+0

"Feuer und ** vergessen **" wörtlich * bedeutet * "Ich bin nicht auf Ausnahmen". –

Antwort

1

Denn jetzt habe ich es

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