我一直在使用.NET 4.6.1中的異步調用,我想知道正確的方式來拋出錯誤是從一個接口的實現者,期望一個異步方法,但實際上是同步的。例如:C#異步異常包裝
public interface ISomeInterface
{
Task ExecuteAsync();
}
public class SomeClass : ISomeInterface
{
public Task ExecuteAsync()
{
return Task.FromException(new Exception());
}
}
我發現Task.FromException
here。
所以這是.NET 4.6仍然看似建議包裝異常。不過,我可以只寫了下面的代碼:
public class SomeClass : ISomeInterface
{
public Task ExecuteAsync()
{
throw new Exception();
}
}
當我使用try/catch塊稱爲第二個實現,客戶端抓住了Exception
,我認爲就是爲什麼我們在第一時間使用Task.FromException
,什麼更多的是它還包含了整個調用堆棧到原始異常(而方法一隻有一個堆棧跟蹤到客戶端的等待操作)。看來第二種方法更好,但似乎每個人都在使用方法一。由於async
的實施變更,現在已經接近過時了,還是我缺少某些東西?
我也注意到在堆棧跟蹤中,async
方法現在不會在調用之間引入任何附加幀。我假設這只是爲了簡化堆棧跟蹤?
啊哈,明白了!謝謝你澄清斯蒂芬。 – Matt