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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

取消客戶端上長(zhǎng)時(shí)間運(yùn)行的操作 cancel

取消客戶端上長(zhǎng)時(shí)間運(yùn)行的操作 cancel

C#
臨摹微笑 2023-08-20 10:05:44
我使用 ASP.NET Core 和 Razor Pages 開始了我的第一個(gè)項(xiàng)目。根據(jù)客戶端請(qǐng)求,將啟動(dòng)長(zhǎng)時(shí)間運(yùn)行的數(shù)據(jù)庫操作?,F(xiàn)在我想認(rèn)識(shí)到,當(dāng)用戶離開網(wǎng)站時(shí),可以取消數(shù)據(jù)庫操作。我已經(jīng)嘗試過使用cancelToken,但它永遠(yuǎn)不會(huì)被取消。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)用。你能告訴我,為什么取消令牌沒有被取消,或者我還有什么其他選項(xiàng)來檢測(cè)客戶端的墮胎?編輯1我將令牌傳遞給 NpgsqlCommand 的此函數(shù)調(diào)用:var dataReader = await command.ExecuteReaderAsync(cancellationToken);
查看完整描述

2 回答

?
翻翻過去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

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


設(shè)計(jì)任務(wù)的擴(kuò)展方法如下。


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;

}

如下面的示例代碼所示,您可以使用上面設(shè)計(jì)的擴(kuò)展方法來取消它。


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ù)給定時(shí)間完成的,但您可以通過調(diào)用 cancel 方法來調(diào)用取消。


查看完整回答
反對(duì) 回復(fù) 2023-08-20
?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

該問題是 IISExpress 中的錯(cuò)誤,

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


查看完整回答
反對(duì) 回復(fù) 2023-08-20
  • 2 回答
  • 0 關(guān)注
  • 212 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)