第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

取消客戶端上長時間運行的操作 cancel

取消客戶端上長時間運行的操作 cancel

C#
臨摹微笑 2023-08-20 10:05:44
我使用 ASP.NET Core 和 Razor Pages 開始了我的第一個項目。根據(jù)客戶端請求,將啟動長時間運行的數(shù)據(jù)庫操作?,F(xiàn)在我想認識到,當用戶離開網(wǎng)站時,可以取消數(shù)據(jù)庫操作。我已經(jīng)嘗試過使用cancelToken,但它永遠不會被取消。public async Task<JsonResult> OnPostReadAsync([DataSourceRequest] DataSourceRequest request, CancellationToken cancellationToken){    var messages = await _logMessageService.GetLogMessagesAsync(request, cancellationToken);    return new JsonResult(messages.ToDataSourceResult(request));}該函數(shù)由 Telerik Kendo UI 網(wǎng)格調(diào)用。你能告訴我,為什么取消令牌沒有被取消,或者我還有什么其他選項來檢測客戶端的墮胎?編輯1我將令牌傳遞給 NpgsqlCommand 的此函數(shù)調(diào)用:var dataReader = await command.ExecuteReaderAsync(cancellationToken);
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

要取消 IO 綁定(即運行時間較長的任務),您可以執(zhí)行以下代碼,這些代碼是我從 C# with CLR 書中獲得的。


設計任務的擴展方法如下。


private static async Task<TResult> WithCancellation<TResult>(this Task<TResult> originalTask,

CancellationToken ct) {

   // Create a Task that completes when the CancellationToken is canceled

   var cancelTask = new TaskCompletionSource<Void>();

   // When the CancellationToken is canceled, complete the Task

  using (ct.Register(

     t => ((TaskCompletionSource<Void>)t).TrySetResult(new Void()), cancelTask)) {

    // Create a Task that completes when either the original or

    // CancellationToken Task completes

    Task any = await Task.WhenAny(originalTask, cancelTask.Task);

    // If any Task completes due to CancellationToken, throw OperationCanceledException

     if (any == cancelTask.Task) ct.ThrowIfCancellationRequested();

  }

  // await original task (synchronously); if it failed, awaiting it

  // throws 1st inner exception instead of AggregateException

 return await originalTask;

}

如下面的示例代碼所示,您可以使用上面設計的擴展方法來取消它。


public static async Task Go() {

   // Create a CancellationTokenSource that cancels itself after # milliseconds

   var cts = new CancellationTokenSource(5000); // To cancel sooner, call cts.Cancel()

   var ct = cts.Token;

   try {

    // I used Task.Delay for testing; replace this with another method that returns a Task

     await Task.Delay(10000).WithCancellation(ct);

     Console.WriteLine("Task completed");

   }

   catch (OperationCanceledException) {

    Console.WriteLine("Task cancelled");

  }

}

在此示例中,取消是根據(jù)給定時間完成的,但您可以通過調(diào)用 cancel 方法來調(diào)用取消。


查看完整回答
反對 回復 2023-08-20
?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

該問題是 IISExpress 中的錯誤,

我切換到 Kestrel,現(xiàn)在一切都按預期進行。


查看完整回答
反對 回復 2023-08-20
  • 2 回答
  • 0 關注
  • 225 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號