如果在 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.
我正在尝试随机生成大小为 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.