7

IOwinRequest.CallCancelled CancellationToken IOwinRequest の使用方法を理解しようとしています。リクエストが無効になるたびにトークンにフラグが立てられると想定しました(次の場合)。

  • WebApp.Start によって返されたオブジェクトを破棄します。
  • HttpClient.GetAsync タスクがキャンセルまたは破棄されます。

これらすべてのケースで、CallCancelled リクエストにはフラグが立てられないようです。なんで?

編集: コードにエラーが見つかり、最初のポイント「WebApp.Start によって返されたオブジェクトを破棄する」が機能するようになりました。ただし、破棄/キャンセルされたクライアント リクエストは、サーバー リクエスト トークンのフラグをトリガーしません。

いくつかの背景として、サーバーがクライアントに返されるデータが到着するまで、またはリクエストがキャンセルされるまでリクエストスレッドを中断するロングポーリングを実装しようとしています。これを実装するために、キャンセル トークンにフラグが立てられると、一時停止ループが抜け落ちます。フラグが立てられていない場合、返すものがなければ、リクエスト スレッドは決して終了しません。トークンにはフラグが立てられないため、サーバーは無限の数のリクエストが終了しない可能性があります。

4

0 に答える 0