Из основного AppDomain я пытаюсь вызвать асинхронный метод, определенный в типе, созданном в другом AppDomain.
Например, следующий тип MyClass
наследуется от MarshalByRefObject
и создается в новом AppDomain:
public class MyClass : MarshalByRefObject
{
public async Task<string> FooAsync()
{
await Task.Delay(1000);
return "Foo";
}
}
В основном AppDomain я создаю новый AppDomain и создаю экземпляр MyClass внутри этого AppDomain, затем я вызываю асинхронный метод.
var appDomain = AppDomain.CreateDomain("MyDomain");
var myClass = (MyClass)appDomain.CreateInstanceAndUnwrap(typeof(MyClass).Assembly.FullName, typeof(MyClass).FullName);
await myClass.FooAsync(); // BAM !
Конечно, я получаю SerializationException
, когда пытаюсь сделать вызов, так как тип Task
не наследуется от MarshalByRefObject
и не является сериализуемым.
Как я мог обойти это? Мне бы очень хотелось иметь возможность вызывать/ожидать асинхронные методы из типа, созданного в другом AppDomain... Есть ли способ?
Спасибо !