2016-02-27 52 views
0

我有一個動作在我的ASPNET 5(ASPNET核心)的WebAPI控制器,它同時被請求可能需要大量的時間,它會運行到最後,即使用戶已經取消了負載請求處理。 aspnet中的請求或conroller/httpContext中的任何事件是否有任何取消令牌的變體,當用戶已不需要其結果時,它可以幫助我停止操作?取消當用戶停止頁面加載

如果使用的CancellationToken,它永遠不會改變它的狀態:

[HttpGet] 
public async Task<string> Get(CancellationToken cancellationToken) 
{ 
    await Task.Run(() => 
    { 
     while (!cancellationToken.IsCancellationRequested) ; 
     return; 
    }); 
    return "hi"; 
} 

,也回調傳遞給令牌的註冊方法從來沒有所謂了。

+0

看起來不可能從客戶端取消令牌 –

+0

@KhanhTO,我認爲服務器必須在tcp連接中止時更改令牌狀態,當然我不希望客戶端傳遞任何令牌。 – FLCL

回答

0

有處理瀏覽器加載停止不可靠的事件。 IE有document.onstop事件,其他瀏覽器不支持它。

也許你可以嘗試這樣,把你的Ajax調用在window.onload事件。在完成加載頁面中使用的DOM和其他資源後觸發onload事件。

因此如果用戶完全加載,window.onload事件不會被解僱,因此您的AJAX調用不會得到執行之前停止頁面加載。

+0

我沒有瀏覽器在客戶端,只是HTTP休息客戶端,它可以打破連接。 – FLCL

+0

好吧,那你不得不考慮[這裏](http://www.davepaquette.com/archive/2015/07/19/cancelling-long-running-queries-in-asp-net-mvc-and-web -api.aspx) –

+0

不幸的是,由於某些原因的CancellationToken永遠不會改變它關於請求取消狀態或信號 – FLCL