c#threads停止执行

时间:2013-06-19 21:20:17

标签: c# multithreading

我有一个根据某些条件返回字符串的函数。 如果函数没有在5秒内完成,我想停止它并返回一个不同的值。 我的函数从数据库中执行多次尝试检索。可能需要超过五秒钟,然后我想停止检索尝试,而是为那些调用函数的人返回其他值 我怎样才能做到这一点? 感谢

1 个答案:

答案 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
    }
}