c# – 尝试Catch外面:await Task.Run(()

前端之家收集整理的这篇文章主要介绍了c# – 尝试Catch外面:await Task.Run(()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试抓住以下内容:await Task.Run(()=>有意义或只是在等待中使用它们?
  1. private async void Test()
  2. {
  3. try
  4. {
  5. await Task.Run(() =>
  6. {
  7. try
  8. {
  9. DoingSomething();
  10. }
  11. catch (Exception ex)
  12. {
  13. log.Error(ex.Message);
  14. }
  15. });
  16. }
  17. catch (Exception ex)
  18. {
  19. log.Error(ex.Message);
  20. }
  21. }

解决方法

如果您处理代理中的异常(在您的情况下仅用于记录目的),等待在正常情况下不会引发异常.这应该是罚款.
  1. private async Task Test()
  2. {
  3. await Task.Run(() =>
  4. {
  5. try
  6. {
  7. DoingSomething();
  8. }
  9. catch (Exception ex)
  10. {
  11. log.Error(ex.Message);
  12. }
  13. });
  14.  
  15. }

但是,由于您正在等待该任务,所以最有可能的是,在Test方法中会有一些DoSomethingElse,这可能会受到Task的结果的影响 – 在这种情况下,等待一个try / catch也是有意义的.

  1. private async Task Test()
  2. {
  3. try
  4. {
  5. await Task.Run(() =>
  6. {
  7. try
  8. {
  9. DoingSomething();
  10. }
  11. catch (SomeSpecialException spex)
  12. {
  13. // it is OK to have this exception
  14. log.Error(ex.Message);
  15. }
  16. });
  17.  
  18. DoSomethingElse(); // does not run when unexpected exception occurs.
  19. }
  20. catch (Exception ex)
  21. {
  22. // Here we are also running on captured SynchronizationContext
  23. // So,can update UI to show error ....
  24. }
  25. }

猜你在找的C#相关文章