我組建了一個簡單的C#應用程序,其中用戶類型命令爲「命令欄」,結果是實時獲取。C#生成新線程訪問Web服務中止
例如,我可以鍵入google stackoverflow
,它會向API發送一個API調用請求,並獲取每個結果並將它們顯示在UI中。
如果用戶在打字時暫停超過1/4秒,目前我會關閉「搜索」方法,因此如果您在中間暫停,則可能會觸發google stack
和google stackoverflow
。
現在在現實中,API是做一個(相當慢的)數據庫查詢,這將導致用戶界面鎖定,而第一次搜索完成後,它會嘗試啓動第二搜索之前。
有一個簡單的(C#4.0)的方式運行在一個單獨的線程,我可以再取消搜索呼叫/中止如果用戶繼續輸入?
例如
Task<string> thread;
string getSearchResults(string input) {
... Do some work ...
}
string userPaused(string search) {
if(this.thread.isRunning()) this.thread.Kill();
this.thread = new Task<String>(getSearchResults(string input);
return this.thread.result();
}
我已經看過了任務API和它看起來並不彷彿可以在工作中殺死一個任務,它表明一個API過程中使用,同時外觀和傳遞shouldStop
布爾值,但是調用下載結果沒有while循環。
但是,如果您需要獲取返回值,線程文檔將指出您需要執行的任務。
看一看的CancellationToken結構:http://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken.aspx。看起來像是你在尋找。 – takemyoxygen 2013-05-08 11:13:25
任務可能是你正在尋找的。你可以取消它們:http://msdn.microsoft.com/en-us/library/dd997396.aspx你需要使用取消令牌來做到這一點,並且當然要在你的任務方法內部取消取消。但是,由於大部分工作都是數據庫查詢 - 您可能只想放棄任務,根本不在意結果(只是照顧所有例外情況),並在搜索條件發生變化時觸發新任務。取決於你需要的東西 – Pako 2013-05-08 11:13:31
你看了這裏:http://msdn.microsoft.com/en-us/library/dd997396.aspx – Marco 2013-05-08 11:14:25