ITPub博客

首页 > > > Task异步编程代码求解释

Task异步编程代码求解释

作者:germo 时间:2019-09-10 14:54:21 0 删除 编辑

Task异步编程代码求解释:using(ct.Register(()=>{tcs.TrySetResult(true);}))


先上代码,疑问代码在最后一个方法:

private CancellationTokenSource m_cts; 

public void btnCancel_Click(object sender, EventArgs e)
{
    if (m_cts != null) m_cts.Cancel();
}

public async  void btnRun_Click(object sender, EventArgs e)
{
    m_cts = new CancellationTokenSource();
    btnRun.Enabled = false;
    try
    {
        Task<Bitmap> imageDownload = GetBitmapAsync(txtUrl.Text); 
        await UntilCompletionOrCancellation(imageDownload, m_cts.Token);
        if (imageDownload.IsCompleted)
        {
            Bitmap image = await imageDownload;
            panel.AddImage(image);
        }
        else imageDownload.ContinueWith(t => Log(t));
    }
    finally { btnRun.Enabled = true; }
}

private static async  Task UntilCompletionOrCancellation(
    Task asyncOp, CancellationToken ct)
{
    var tcs = new TaskCompletionSource<bool>();
    using(ct.Register(() => tcs.TrySetResult(true)))//这段代码中的using
        await Task.WhenAny(asyncOp, tcs.Task);
    return asyncOp;
}

问题:

using(ct.Register(()=>tcs.TrySetResult(true)))这行代码为什么用using?我知道using会自动释放资源,可我用Task从来没有手动释放资源,

使用Task需要手动释放资源吗?

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1868/viewspace-3160285/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: c# panel控件覆盖
下一篇: javascript的伪数组
请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    209
  • 访问量
    8229