Run中使用CancellationToken进行超时不起作用

Run中使用CancellationToken进行超时不起作用

本文介绍了在Task.Run中使用CancellationToken进行超时不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

好的,我的问题很简单。为什么这段代码不会抛出 TaskCancelledException

OK, my questions is really simple. Why this code does not throw TaskCancelledException?

static void Main()
{
    var v = Task.Run(() =>
    {
        Thread.Sleep(1000);
        return 10;
    }, new CancellationTokenSource(500).Token).Result;

    Console.WriteLine(v); // this outputs 10 - instead of throwing error.
    Console.Read();
}

但这一项有效

static void Main()
{
    var v = Task.Run(() =>
    {
        Thread.Sleep(1000);
        return 10;
    }, new CancellationToken(true).Token).Result;

    Console.WriteLine(v); // this one throws
    Console.Read();
}


推荐答案

您没有在<$ c $内编写任何代码c> Task.Run 方法来访问您的 CancellationToken 并实施取消-这样您就有效地忽略了取消请求并运行到完成。

You didn't write any code inside your Task.Run method to access your CancellationToken and to implement cancellation - so you effectively ignored the request for cancellation and ran to completion.

这篇关于在Task.Run中使用CancellationToken进行超时不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 22:18