Основа рабочего процесса: Асинхронные операции (длинная сеть I/O)

Я должен создать приложение, которое будет запущено несколько раз в день (это не - интерактивное).

Для работы этому нужны Большие объемы данных из Интернета (мегабайты) через довольно медленное соединение, таким образом, служебные вызовы WCF занимают некоторое время.

В то же время это должно выполнить локальные вычисления и имеет сложный процесс инициализации.

Так, что я хочу сделать, должен создать рабочий процесс, который асинхронно выбирает данные (занимает несколько минут), уже инициализируя / вычисление локально.

Существует ли способ выполнить это?

1
задан StormianRootSolver 13 June 2010 в 11:40
поделиться

2 ответа

Вы можете использовать компонент BackgroundWorker для каждой асинхронной операции - один для вычислений и один для загрузки данных.

Мое предложение - использовать один поток для каждой операции. После запуска каждого потока вызовите thread.Join() для каждого потока, чтобы дождаться завершения каждого потока.

например,

Thread[] workers = new Thread[2];
workers[0] = new Thread(dataDownloader.Fetch);
workers[1] = new Thread(calculator.DoComplexCalculations);

foreach(Thread t in workers)
{
   t.Start();
}
foreach(Thread t in workers)
{
   t.Join();
}
1
ответ дан 2 September 2019 в 23:48
поделиться

Вы можете сгенерировать асинхронные классы своей службы wcf (используя команду linetool). Если вы запустите эти асинхронные методы, они немедленно вернутся и по завершении вызовут делегат обратного вызова. Таким образом, вы можете делать все свои вычисления, пока ждете

1
ответ дан 2 September 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: