2015-01-09 19 views
0

我打電話第三方庫的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 2015-01-09 19:47:16

+0

我不知道這是如何適用於這種情況下,因爲我只有一個任務。可能是如果你可以用代碼發佈答案? – BKS 2015-01-09 19:52:34

回答

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 2015-01-09 19:58:40

+1

Plus WaitAny是一個阻止呼叫。 – BKS 2015-01-09 20:26:01