创建SynchronizationContext时的异常做法?

时间:2009-11-09 14:49:03

标签: c# .net workflow-foundation workflow-foundation-4 synchronizationcontext

我正在创建 SynchronizationContext 的STA版本,以便在Windows Workflow 4.0中使用。我想知道在发布回调时如何处理异常。

SynchronizationContext 可用于发送(同步执行)或发布(异步执行) SendOrPostCallback 的代理 STRONG>。虽然在这两种情况下我都在STA线程上调用委托,但是在同步执行时很容易知道如何处理异常。我阻塞调用线程,在我的工作线程上调用回调,记录任何异常,解锁调用线程,并在调用线程上抛出任何记录的异常。

我应该对异步帖子做些什么不太清楚。没有机制将该异常从执行线程转移回调用线程; 发布是100%火,忘了。 SendOrPostCallback 中没有 EndInvoke() WaitHandle 。抛出的任何异常都将导致应用程序被拆除。

我别无选择,只能在帖子中抛出异常来推断我的申请?这似乎是框架中 SynchronizationContexts 的默认行为(谢谢你,Reflector)。我似乎无法弄清楚为什么会这样。是不是应该有一些方法来阻止异步发布的繁荣?

2 个答案:

答案 0 :(得分:5)

在这种情况下,我让替代原则指导我。我将实现与SynchronizationContext的现有实例相同的行为。否则违反替代原则,可能会以意想不到的方式再次咬你。

答案 1 :(得分:2)