我有一个根据某些条件返回字符串的函数。 如果函数没有在5秒内完成,我想停止它并返回一个不同的值。 我的函数从数据库中执行多次尝试检索。可能需要超过五秒钟,然后我想停止检索尝试,而是为那些调用函数的人返回其他值 我怎样才能做到这一点? 感谢
答案 0 :(得分:1)
您可以使用Task.Wait等待任务完成,并CancellationToken取消任务执行,如果它未在指定的超时时间内完成:
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
// assume your function returns integer value
Task<int> task = Task<int>.Factory.StartNew(() => GetData(token), token);
int result;
if (task.Wait(5000))
result = task.Result;
else
{
tokenSource.Cancel(); // cancel task
result = 42; // default value
}
这是您的数据检索方法
private int GetData(CancellationToken token)
{
int attemptsCount = 5;
for (int i = 0; i < attemptsCount; i++)
{
if (token.IsCancellationRequested)
token.ThrowIfCancellationRequested(); // OperationCanceledException
// try get data from database
// return data
}
}