iT邦幫忙

2

非同步執行後,網頁關閉後非同步的流程會繼續執行完嗎?

請問大大們:
如果我呼叫了一個非同步方法,不論是用js ajax呼叫或c# Task呼叫,若呼叫完,user把網頁切換掉,或者把網頁關掉,那己經呼叫的非同步方法會依舊把內容執行完嗎?
假定這個非同步方法需要10分鐘才能把內容完全處理完,所以不卡user的操作介面,採用非同步執行

js 呼叫ajax
$.ajax({
type: 'GET',
url: '/Test/AjaxExcute', //呼叫MVC裡Controller的方法, 假定需執行10分鐘才會執行完畢
dataType: 'script'
});

C# 呼叫非同步
TaskFactory taskFactory = new TaskFactory();
taskFactory.StartNew(() => Console.WriteLine("HI");, "AsyncState1");

看更多先前的討論...收起先前的討論...
咖咖拉 iT邦好手 1 級 ‧ 2021-09-10 09:58:42 檢舉
JS 會停止
C# 不會

JS的API一樣是C# 就算關掉網頁 C#還是會繼續跑完
leo226 iT邦新手 4 級 ‧ 2021-09-11 00:16:38 檢舉
所以如果是JS 的Ajax打到C#的Task,按照這個邏輯C#的Task應該也會把它Task的內容執行完才結束吧~
水無痕 iT邦新手 3 級 ‧ 2021-09-11 08:17:08 檢舉
拍謝,搞錯
leo226 iT邦新手 4 級 ‧ 2021-09-11 14:56:34 檢舉
我沒有要取消,但我想知道的是它會不會全部跑完~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

5

正常依理論來說不會停止,但還是有但書解釋的存在。

所謂的不會停止,是指發送命令端的指令。並不會去主動停止。
也不會因為換頁切頁或是關閉頁面而停止。
畢竟它只是將執行給送出去了。
但這只是這邊不會去停止。

接收端或是運行命令端。還是存在時長問題、錯誤問題、連線檢查的可能性存在。
兩種問題不能混為一談。

所以你這個問題的答案其實很難定義「對」與「不對」
因為「網頁關閉」這個動作的確不會去影響執行。
但還是有機會執行運行停止的情況發生。但其停止原因大多數來說並不會是因為網頁關閉造成的。

0
max19960419
iT邦新手 5 級 ‧ 2021-09-15 12:33:24

要看你 Server 是怎麼處理連線斷開的
一般的設計是這樣:

  1. Client 傳送 requeset 給 Server
  2. Server 回應任務開始, Client 結束連線
    在此回應就已經結束了, Server 的非同步任務就不在受到 Client 影響
  3. Server 繼續執行非同步任務
  4. Server 完成任務,看用什麼方式通知 Client
    可能是 Client polling 或是 websocket

我要發表回答

立即登入回答