サイズnの数独をランダムに生成しようとしています。
したがって、私は関数を書きました: generateSudoku(int blocksize)
しかし、この世代は完全にランダムであるために失敗することがあり、不可能な数独を生成することがあるかもしれません。これらのイベントを防ぐために、いくつかのチェック機能を作成しました。
偽の2x2数独を生成する可能性は50%あると思います。失敗すると、関数は無期限に実行されます。
そこで、C#に、特定の関数が特定の実行時間を超えたことを検出する関数があるかどうか、および関数をリロードできる関数があるかどうかを知りたいと思います。
たとえば、コードに次のようなものを含めたいと思います。
while ( generateSudoku(int blocksize).Time() > threshold ){
generateSudoku(int blocksize).Reload()
}
これを書くのは絶対に正しくないことは知っていますが、それをよりよく説明する方法がわかりません。
手伝って頂けますか ?手がかりや提案はありますか?
前もって感謝します !
これは、スレッドまたは任意の種類の非同期ロジックを使用して実現できます。事実上、あなたが探しているのは、実行を監視するためのコードと、作業を行うための別のコードです。
関数を変更できる場合は、次のように非同期を使用します:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/cancel-async-tasks-after-a-period -時間の
private async void MonitorCalculation(object sender, RoutedEventArgs e)
{
// Instantiate the CancellationTokenSource.
cts = new CancellationTokenSource();
try
{
// ***Set up the CancellationTokenSource to cancel after 2.5 seconds. (You
// can adjust the time.)
cts.CancelAfter(2500);
// I'm assuming this is your function that calculates time
await CalculateTime(cts.Token);
}
catch (OperationCanceledException)
{
// "\r\nDownloads canceled.\r\n";
}
catch (Exception)
{
// "\r\nDownloads failed.\r\n";
}
cts = null;
}
次に、でOperationCancelledException
再試行するか、非同期関数を再度呼び出す必要があることを示す変数を返すことができます。
計算を非同期に変更できない場合は、TaskFactory
クラスを試すことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加