2011-02-10 28 views
8

Trong bộ điều khiển async trong ASP.NET MVC, có cách nào để biết liệu/khi yêu cầu bị hủy bỏ bởi máy khách?Phát hiện một yêu cầu bị hủy bỏ trong ASP.NET MVC

[NoAsyncTimeout] 
public void IndexAsync() { 
    var source = new CancellationTokenSource(); 

    Task.Factory.StartNew(() => { 
    while (true) { 
     if (source.Token.IsCancellationRequested) { 
     AsyncManager.Finish(); 
     return; 
     } 

     Response.Write("."); 
     Thread.Sleep(1000); 
    } 
    }, source.Token); 

    // Is there any way to do this? 
    Request.Aborted += (sender, e) => source.Cancel(); 

    AsyncManager.OutstandingOperations.Increment(); 
} 
+1

thể trùng lặp của [Phát hiện async client ngắt kết nối trong ASP.NET MVC] (http://stackoverflow.com/questions/4772597/detecting-async-client-disconnect-in-asp- net-mvc) Tôi chỉ tìm thấy điều này, nó cũng trả lời câu hỏi của bạn cũng như với một số thông tin khác. –

Trả lời

8

gì về việc sử dụng

HttpContext.Current.Response.IsClientConnected 

Từ một thử nghiệm rất cơ bản này dường như không làm việc cho các yêu cầu ajax aborted. MSDN cho thấy rằng nó nên mặc dù.

+0

Tôi đang sử dụng nó trong ngữ cảnh Đồng bộ bên trong khi vòng lặp và hoạt động hoàn hảo, cho phép xử lý các quy trình, luồng hoặc tệp được lưu trong bộ nhớ cache trước khi kết thúc phản hồi. –

+0

Tôi thấy rằng nó hoạt động cho các yêu cầu AJAX bị hủy bỏ, nhưng không phải khi Fiddler giám sát những gì đang xảy ra! Tôi sử dụng Fiddler hầu như mọi lúc, vì vậy phải mất một lúc để phát hiện ra điều đó. Tôi đang sử dụng jQuery. Tôi nói 'var myRequest = $ .post (...);', sau đó không lâu sau bởi 'myRequest.abort();' – teedyay

2

Hãy thử

CancellationToken clientDisconnectedToken = HttpContext.Response.ClientDisconnectedToken; 
Các vấn đề liên quan