Я создаю Appdomain для запуска фрагмента кода, который может быть буквально любой вещью. Я хочу, чтобы мой хост-процесс был в состоянии, когда все слово завершено, но асинхронные вызовы / потоки блокируют мои усилия. Мой код примерно такой:
AppDomain ad = AppDomain.CreateDomain(...);
WorkUnit mbro = (WorkUnit)ad.CreateInstanceAndUnwrap(...);
mbro.Run();
И рабочий модуль выполняет асинхронный вызов, например:
class WorkUnit {
public override void Run()
{
WebClient wb = new WebClient();
wb.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wb_DownloadStringCompleted);
wb.DownloadStringAsync(new Uri("http://localhost/WhoTouches/ThreadSleep.aspx"));
}
void wb_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
Console.WriteLine("job is done now");
}
}
Я ищу способ узнать, когда все сделано. Я не уверен, как, но на днях я обнаружил, что если бы вы использовали этот WorkUnit на странице ASPX, он не завершил бы запрос до завершения асинхронного вызова веб-клиента. Суть в том, что это возможно, но я не знаю, как.