首页 > > > Task异步编程代码求解释
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/ ,如需转载,请注明出处,否则将追究法律责任。