1

我有一个函数可以发出一些 http 请求,并在一个任务中运行。该函数可以在中间中断,因为我无法中止任务,我在函数中添加了一些布尔条件。例子:

public int foo(ref bool cancel)
{
    if(cancel)
    {
        return null
    }
    //do some work...
    if(cancel)
    {
        return null
    }
    //http webrequest
    if(cancel)
    {
        return null
    }
 }

这工作得很好,虽然这是一些相当丑陋的代码。

另一个问题是当我已经执行了网络请求时,我需要时间才能获得响应,而不是函数 cncelation 需要很多时间(直到我得到响应)。

我有更好的方法来检查吗?或者我应该使用线程而不是任务?

编辑

我添加了一个取消令牌:声明了一个 cancelationTokenSource,并将其令牌传递给任务

CancellationTokenSource cncelToken = new CancellationTokenSource();
Task t = new Task(() => {foo()},cancelToken.token);

当我做 cancelToken.Cancel(); 我还在等待回复,tsk 没有取消。

4

1 回答 1

1

任务支持取消 - 请参见此处

这是一个快速的片段。

class Program
{
    static void Main(string[] args)
    {
        var token = new CancellationTokenSource();
        var t = Task.Factory.StartNew(
            o =>
            {
                while (true)
                    Console.WriteLine("{0}: Processing", DateTime.Now);
            }, token);

        token.CancelAfter(1000);
        t.Wait(token.Token);
    }
}

请记住使用提供的取消令牌等待任务。您应该收到 OperationCanceledException。

于 2013-03-22T17:52:06.553 回答