using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using static System.Console;
using System.Runtime.Remoting.Messaging;
namespace 线程取消模型取消异步委托
{
class Program
{
public delegate bool 业务逻辑Delegate(CancellationToken cn);
static void Main(string[] args)
{
var b = new 业务逻辑Delegate(业务逻辑);
var 取消令牌 = new CancellationTokenSource();
var callBack = new AsyncCallback(回调函数);
b.BeginInvoke(取消令牌.Token, callBack, null);
Console.WriteLine("请输入任意键取消异步操作");
Console.ReadLine();
取消令牌.Cancel();
Console.ReadLine();
}
static bool 业务逻辑(CancellationToken cn)
{
for (int i = 0; i < int.MaxValue; i++)
{
cn.ThrowIfCancellationRequested();
}
return false;
}
static void 回调函数(IAsyncResult iar)
{
//BeginInvoke 的时候不会抛出异常 只有在EndInvoke中才会把BeginInvoke的异常重新抛出
var ar = (AsyncResult)iar;
var dl = (业务逻辑Delegate)ar.AsyncDelegate;
try
{
Console.WriteLine($"任务执行完毕。{dl.EndInvoke(iar)}");
}
catch (OperationCanceledException ex)
{
Console.WriteLine("取消任务成功。");
}
}
}
}
使用.NET线程取消模型取消异步委托
最新推荐文章于 2023-07-30 10:14:42 发布