如果在 C# 中执行超过一定时间,如何重新加载函数?

How to a reload a function if its execution exceeds a certain amount of time in C#?

我正在尝试随机生成大小为 n 的数独。

因此,我编写了函数:generateSudoku(int blocksize)

但是,这一代有时会失败,因为它完全是随机的,它可能碰巧生成一个不可能的数独。我做了一些检查功能来防止这些事件。

我认为有 50% 的机会 生成错误的 2x2 数独,当它失败时,函数 会无限期地运行

所以我想知道 C# 中是否有一些函数检测给定函数 超过一定的执行时间 ,以及是否有一些函数 超过了一定的执行时间 =30=]可以重新加载函数.

例如,我想在我的代码中包含这样的内容:

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-of-time

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你可以重试或者return一个变量指示你应该再次调用异步函数。

如果无法将计算更改为异步,则可以尝试 TaskFactory class.