Существует 4 различных шаблона использования асинхронной модели в .NET , так как этот вопрос очень хорошо подходит.
Вы используете "Я позвоню тебе" подход . Однако, если вы хотите подождать, пока рабочий элемент не будет завершен, лучше всего использовать Mutex
(WaitHandle
):
void Run()
{
Action<string> doWork = DoWork;
IAsyncResult result = doWork.BeginInvoke("I will call you", null, null);
// You "call the method" - wait 10 seconds for the method to finish.
bool success = result.AsyncWaitHandle.WaitOne(10 * 1000);
}
void DoWork()
{
}
Я подозреваю, что вы не хотите блокировать, и в этом случае "выстрели и забудь" вызывает наименьшую головную боль.