Мы работаем со сторонней унаследованной системой, которая требует схожести потоков для некоторой логики разрыва. Мы также размещаем службу WCF внутри IIS, которая при больших нагрузках будет выполнять грубую разгрузку нашего домена приложения. В этих случаях ответственному финализатору приходится выполнять очистку. К сожалению, без привязки потоков в финализаторе сторонние системы блокируются.
Так примерно:
public class FooEnvironment : CriticalFinalizerObject, IDisposable
{
public FooEnvironment()
{
// start up C API
}
public bool Dispose()
{
// shutdown C API (from same thread ctor was called on)
}
~FooEnvironment()
{
// try to shutdown C API but deadlock!
}
}
Я пробовал разные вещи, когда мы запускаем с ExecutionContext из потока инициализации, но это не работает (по крайней мере, в IIS), и мы получаем недопустимое исключение операции, заявляющее, что этот контекст выполнения не может быть использован ( якобы потому, что он мог быть перераспределен по доменам приложений, что кажется вероятным).
Я прочитал несколько вещей, в основном утверждая, что то, что я пытаюсь сделать, не может быть сделано, но я решил спросить, так как по этой теме не так много информации.