ASP.NET C# ページで、initialAction
実行する必要がある非同期があります。
initialAction
サーバーは WebSocket を介してメッセージを送信する必要があり、サーバーはクライアントが応答するまでしばらく待機する必要があります。応答したら、 を呼び出す必要がありますonComplete
。私はすでにこの部分を終えています。
アクションが 5 秒以内に完了しない場合 (たとえば)、スクリプトを先に進めたいと考えています。現在、スクリプトをタスクで待機させ、スリープとチェックを繰り返しCancellationTokenSource
ます。CancellationTokenSource
によってキャンセルされた場合、onComplete
または 5 秒が経過した場合、スクリプトは続行されます。
以下は、私が見つけた最良の方法です。より良い方法はありますか?
public static string wait(Action<Action<string>> initialAction)
{
string message = null;
using (CancellationTokenSource tokenSource = new CancellationTokenSource())
{
Action<string> onComplete = (msg) =>
{
message = msg;
tokenSource.Cancel();
};
Task sleepTask = new Task(() =>
{
Stopwatch stopwatch = Stopwatch.StartNew();
while (true)
{
if (tokenSource.IsCancellationRequested ||
stopwatch.ElapsedMilliseconds > 5000) { break; }
Thread.Sleep(10);
}
}, tokenSource.Token);
initialAction(onComplete);
sleepTask.Start();
sleepTask.Wait();
}
return message;
}