2015-01-09 3 views
0

Я звоню Run метода является Стороной Библиотекой API третьего по следующемуКак timout на этой задаче

await Task.Factory.StartNew(() => ThirdPartLibraryAPI.Run()); 

Я хотел бы установить некоторые тайм-аут на этом в случае, если это API занимает слишком много времени. Как я могу это сделать?

+0

Создать еще одну задачу, используя Task.Delay(), а затем использовать Task.WhenAny(), чтобы ждать только первая задача для завершения. Подробнее на http://stackoverflow.com/questions/9846615/async-task-whenall-with-timeout – sudheeshix

+0

Я не уверен, как это применимо в этом случае, поскольку у меня только одна задача. Может быть, если вы можете отправить ответ с кодом? – BKS

ответ

2

Вот фрагмент кода:

 var timeoutTask = Task.Delay(1500); 
     //using .ContinueWith(t => /*stuff to do on timeout*/); 
     //will cause the code to execute even if the timeout did not happen. 
     //remember that this task keeps running. we are just not waiting for it 
     //in case the worker task finishes first. 

     var workerTask = Task.Run(() => { ThirdPartLibraryAPI.Run() }); 
     var taskThatCompletedFirst = await Task.WhenAny(timeoutTask, workerTask); 

     //stuff to do on timeout can be done here 
     //if (taskThatCompletedFirst == timeoutTask) 
1

вы можете использовать этот фрагмент

Task t = Task.Factory.StartNew(() => ThirdPartLibraryAPI.Run()); 
Task.WaitAny(t, miliseconds); 
+0

Как я узнаю, что эта задача завершена против таймаута здесь? – BKS

+1

Plus WaitAny - это блокирующий вызов. – BKS

Смежные вопросы