English 中文(简体)
Exception practices when creating a SynchronizationContext?
原标题:

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks.

The SynchronizationContext can be used to Send (execute synchronously) or Post (execute asynchronously) delegates of type SendOrPostCallback. Although in both cases I invoke the delegate on a STA thread, its easy to know how to handle exceptions when executing synchronously. I block the calling thread, Invoke the callback on my worker thread, record any exceptions, unblock the calling thread, and throw any recorded exceptions on the calling thread.

What I should do on the asynchronous Post is less clear. There is no mechanism for transferring that exception from the executing thread back to the calling thread; Post is 100% fire and forget. There is no EndInvoke() or WaitHandle in the SendOrPostCallback. Any exceptions thrown will result in the application being torn down.

Do I have no choice but to let an exception thrown in a Post tear down my application? That seems to be the default behavior in the SynchronizationContexts in the framework (thank you, Reflector). I can t seem to figure out why this is. Shouldn t there be some way to prevent asynchronous Posts from going boom?

最佳回答

In situations like this I let the substitution principle guide me. I would implement the same behavior as the existing instances of SynchronizationContext. To do otherwise violates the substitution principle and could come back to bite you in unexpected ways.

问题回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签