最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET?Core使用?CancellationToken?取消API請求的操作方法

 更新時間:2024年03月18日 08:54:54   作者:hester·chen  
用戶取消請求時,你可以使用HttpContext.RequestAborted訪問,您也可以使用依賴注入將其自動注入到您的操作中,這篇文章主要介紹了.NET?Core使用?CancellationToken?取消API請求,需要的朋友可以參考下

您是否曾經(jīng)訪問過一個網(wǎng)站,它需要很長時間加載,最終你敲擊 F5 重新加載頁面。

即使用戶刷新了瀏覽器取消了原始請求,而對于服務(wù)器來說,API也不會知道它正在計算的值將在結(jié)束時被丟棄,刷新五次,服務(wù)器將觸發(fā) 5 個請求。

為了解決這個問題,ASP.NET Core 為 Web 服務(wù)器提供了一種機制,就是CancellationToken.

用戶取消請求時,你可以使用HttpContext.RequestAborted訪問,您也可以使用依賴注入將其自動注入到您的操作中。

長時間運行的任務(wù)請求

現(xiàn)在我們假設(shè)您有一個 API 操作,在向用戶發(fā)送響應(yīng)之前可能需要一些時間才能完成。

在處理該操作時,用戶可以直接取消請求,或刷新頁面(這會有效地取消原始請求,并啟動新請求)。

[HttpGet(Name = "get")]
public async Task<string> GetAsync()
{
    try
    {
        _logger.LogInformation("request in");
        await Task.Delay(5 * 1000);
        _logger.LogInformation("request end");
    }
    catch (Exception ex)
    {
        _logger.LogInformation("request ex");
    }
    return "ok";
}

如果用戶在請求中途刷新瀏覽器,那么瀏覽器永遠(yuǎn)不會收到第一個請求的響應(yīng),但在server端可以看到,操作方法執(zhí)行完成兩次。

這是否是正確將取決于您的應(yīng)用程序。

如果請求修改某些業(yè)務(wù)的狀態(tài),那么您可能不希望在方法中途停止執(zhí)行。如果請求沒有副作用,那么您可能希望盡快停止(可能很昂貴)操作。

用戶取消請求時,你可以使用HttpContext.RequestAborted訪問,您也可以使用依賴注入將其自動注入到您的操作中。

CancellationTokens取消不必要的請求

以下代碼顯示了如何通過將CancellationTokenSource 注入到操作方法中,并通過其取消不必要的操作。

[HttpGet(Name = "get")]
public async Task<string> GetAsync(CancellationToken cancellationToken)
{
    try
    {
        _logger.LogInformation("request in");
        await Task.Delay(5 * 1000,cancellationToken);
        _logger.LogInformation("request end");
    }
    catch (Exception ex)
    {
        _logger.LogInformation("request ex");
    }
    return "ok";
}

通過這個改變,我們可以再次測試我們的場景。

我們發(fā)出一個初始請求,然后我們重新加載頁面。正如您從下面的日志中看到的,第一個請求不會繼續(xù)執(zhí)行。

用戶刷新瀏覽器取消請求后不久,原始請求就會中止,并TaskCancelledException通過 API 過濾器管道傳播回來,并備份中間件管道。

根據(jù)您的場景,您可能能夠依靠此類框架方法來檢查 的狀態(tài)CancellationToken,或者您可能需要自己監(jiān)視取消請求。

過濾器捕獲異常

您可以通過以上try catch 捕獲,或者通過一個過濾器統(tǒng)一監(jiān)視此異常。

public class OperationCancelledExceptionFilter : ExceptionFilterAttribute
{
    private readonly ILogger _logger;
    public OperationCancelledExceptionFilter(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<OperationCancelledExceptionFilter>();
    }
    public override void OnException(ExceptionContext context)
    {
        if (context.Exception is OperationCanceledException)
        {
            _logger.LogInformation("Request was cancelled");
            context.ExceptionHandled = true;
            context.Result = new StatusCodeResult(400);
        }
    }
}
builder.Services.AddControllers(options =>
{
    options.Filters.Add<OperationCancelledExceptionFilter>();
});

到此這篇關(guān)于.NET Core使用 CancellationToken 取消API請求的文章就介紹到這了,更多相關(guān).NET Core取消API請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Asp.net利用JQuery彈出層加載數(shù)據(jù)代碼

    Asp.net利用JQuery彈出層加載數(shù)據(jù)代碼

    最近看QQ空間里面的投票功能很使用。點擊一個鏈接就彈出一個層,然后再加載一些投票信息,旁邊的區(qū)域變成灰色不可用狀態(tài)。其實這不算什么高深的技術(shù),只要在ASP.NET中利用JQuery結(jié)合一般處理程序ASHX即可搞定了。
    2009-11-11
  • .NET?6開發(fā)TodoList應(yīng)用之請求日志組件HttpLogging介紹

    .NET?6開發(fā)TodoList應(yīng)用之請求日志組件HttpLogging介紹

    這篇文章介紹了.NET?6開發(fā)TodoList應(yīng)用之請求日志組件HttpLogging,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • MvcPager分頁控件使用注意事項

    MvcPager分頁控件使用注意事項

    這篇文章主要為大家詳細(xì)介紹了MvcPager分頁控件使用的注意事項,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Server.Transfer,Response.Redirect的區(qū)別

    Server.Transfer,Response.Redirect的區(qū)別

    Server.Transfer,Response.Redirect的區(qū)別...
    2006-12-12
  • .Net8.0 WebApi發(fā)布到IIS詳細(xì)步驟

    .Net8.0 WebApi發(fā)布到IIS詳細(xì)步驟

    本文主要介紹了.Net8.0 WebApi發(fā)布到IIS詳細(xì)步驟, 文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 如何禁止文本框的記憶功能方法集錦

    如何禁止文本框的記憶功能方法集錦

    IE提供了一個自動完成功能可以記憶我們的輸入內(nèi)容(如帳號等),方便下一次快速地錄入類似資料.這確實是一個非常友好的功能, 在操作時只需用鼠標(biāo)雙擊文本框或輸入前幾個字符, 系統(tǒng)會自動列出以前的錄入歷史供你選擇, 大大提高錄入速度及準(zhǔn)確性.
    2014-06-06
  • asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值

    asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值

    通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個頁面上同時錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。
    2010-03-03
  • DataGrid中實現(xiàn)超鏈接的3種方法

    DataGrid中實現(xiàn)超鏈接的3種方法

    這篇文章介紹了DataGrid中實現(xiàn)超鏈接的3種方法,有需要的朋友可以參考一下
    2013-09-09
  • IE10下Gridview后臺設(shè)置行高不起作用解決方法

    IE10下Gridview后臺設(shè)置行高不起作用解決方法

    GridView1.HeaderStyle.Height=17發(fā)現(xiàn)在IE10 中不起作用,經(jīng)過反復(fù)測試修改為e.Row.Cells[0].Height=17即可解決問題,有類似問題的朋友可以參考下哈
    2013-04-04
  • 防止.NET應(yīng)用多實例運行的有效方法

    防止.NET應(yīng)用多實例運行的有效方法

    在開發(fā)桌面應(yīng)用程序時,可能會遇到這樣一種需求:限制程序只能同時運行一個實例,如果用戶試圖再次啟動同一個程序,應(yīng)該將已經(jīng)運行的程序窗口置于前臺而不是啟動一個新實例,這篇文章提供了一種通過檢測當(dāng)前程序?qū)嵗⒓せ钜堰\行實例的方法,需要的朋友可以參考下
    2024-12-12

最新評論

宝兴县| 枣阳市| 淄博市| 六安市| 杭州市| 寿光市| 酉阳| 龙江县| 平度市| 平乡县| 民勤县| 兴义市| 濉溪县| 湖南省| 保山市| 昌宁县| 龙江县| 江口县| 大新县| 蕲春县| 静宁县| 乌拉特前旗| 昌乐县| 宁陕县| 始兴县| 桃园县| 全椒县| 赤水市| 柏乡县| 海原县| 娄底市| 阳谷县| 米泉市| 碌曲县| 顺义区| 宝清县| 昌黎县| 呼和浩特市| 苍溪县| 高州市| 余江县|