【发布时间】:2017-09-16 03:19:13
【问题描述】:
我有一个场景,我想围绕一个使用 APM 模式公开异步方法的类创建一个包装类。我的想法是包装类应该利用 TAP 模式并公开包装方法,如下例所示:
public class ClassToBeWrapped
{
...
// Throws ExceptionToBeWrapped when used incorrectly
public void BeginRead()
...
}
public class WrapperClass
{
...
public Task<int> ReadAsync()
{
return Task.Factory.FromAsync(classToBeWrapped.BeginRead,...);
}
}
当包装类的消费者调用 ReadAsync 方法时,我希望包装方法的任何自定义异常都被包装并传递给消费者,而不是原始异常。
public class ConsumerClass
{
...
try
{
await wrappedClass.ReadAsync(...);
}catch (WrappedException we)
{
// Does not catch WrappedException, only ExceptionToBeWrapped
...
}
但是,我总是在 catch 方法中捕获未包装的异常。我怀疑我必须在 ReadAsync 方法中对此进行一些处理,但到目前为止都失败了。
你们对如何实现这一点有任何建议吗?
【问题讨论】:
-
你是说
catch (WrappedException we)没有捕捉到WrappedException。你能发布一个可重复的例子吗?此外,此入门指南可能会有所帮助:TAP Wrappers for APM Implementations
标签: c# asynchronous exception-handling task-parallel-library