C# 当任务';取消了吗?

C# 当任务';取消了吗?,c#,.net,C#,.net,我在玩弄wait/Async和cancellationtoken。我的代码可以工作,但是当任务被取消时会发生什么?它仍然在占用资源还是垃圾收集还是什么 这是我的密码: private CancellationTokenSource _token = new CancellationTokenSource(); public Form1() { InitializeComponent(); } async Task<String&g

我在玩弄wait/Async和cancellationtoken。我的代码可以工作,但是当任务被取消时会发生什么?它仍然在占用资源还是垃圾收集还是什么

这是我的密码:

    private CancellationTokenSource _token = new CancellationTokenSource();

    public Form1()
    {
        InitializeComponent();
    }

    async Task<String> methodOne()
    {
        txtLog.AppendText("Pausing for 10 Seconds \n");
        var task = Task.Delay(10000, _token.Token);
        await task;
        return "HTML Returned. \n";

    }

    private async void button1_Click(object sender, EventArgs e)
    {
        try
        {
            var task1 = methodOne();
            await task1;
            txtLog.AppendText(task1.Result + "\n");
            txtLog.AppendText("All Done \n");
        }
        catch (OperationCanceledException oce)
        {
            txtLog.AppendText("Operation was cancelled");
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        _token.Cancel();
    }
private CancellationTokenSource _token=new CancellationTokenSource();
公共表格1()
{
初始化组件();
}
异步任务methodOne()
{
AppendText(“暂停10秒\n”);
var task=task.Delay(10000,_token.token);
等待任务;
return“返回HTML。\n”;
}
私有异步无效按钮1\u单击(对象发送方,事件参数e)
{
尝试
{
var task1=methodOne();
等待任务1;
txtLog.AppendText(task1.Result+“\n”);
txtLog.AppendText(“全部完成\n”);
}
捕获(操作取消异常oce)
{
AppendText(“操作已取消”);
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
_token.Cancel();
}

任务只能同步取消(这意味着它必须询问“我取消了吗?”),因此任务很容易进行清理(例如使用
using
语句)。然后,GC会在之前或之后释放它分配的所有资源(与往常一样,我们不知道GC何时行动,除非我们执行
GC.Collect();GC.WaitForFinalizers();
)…

任务取消时,它会完成(处于取消状态)。它的行为与垃圾收集方面的任何其他对象一样:如果您没有对它的引用,它将被收集

请注意,尽管
任务
确实实现了
IDisposable