C#如何在异步任务中调用及取消一个长时间运行的同步方法

在.Net和C#中运行异步代码相当简单,因为我们有时候需要取消正在进行的异步操作,通过本文,可以掌握 通过CancellationToken取消任务(包括non-cancellable任务)

using System.Diagnostics;

Console.WriteLine("Hello, World!");

var watch = Stopwatch.StartNew();
var origTask = Task.Run(Test);
var t = origTask.Wait(TimeSpan.FromSeconds(11));
if (t)
{
    var result = await origTask;
    Console.WriteLine($"在规定时间内返回结果:{result}");
}
else
{
    Console.WriteLine($"超时了");
}
watch.Stop();
var timeSpend = watch.Elapsed;
Console.WriteLine($"耗时:{timeSpend}");
//Console.WriteLine($"结果为:{await origTask}");
Console.ReadKey();  



string Test()
{
    Thread.Sleep(10_000);
    var val = $"{DateTime.Now.Ticks}-Ni好";
    Console.WriteLine($"测试方法,准备返回值:{val}");
    return val;
}

Thread 编程方式
要想使用 Thread,需要在程序中引用 System.Threading 命名空间,然后再提供一个供线程调度的方法,这个方法是通过 Thread 中的 ThreadStart 委托代理的,下面的代码展示了如何创建线程。

Abort虽然可以立即强制终止线程,但是带来的危险也是明显的,所以我们一定要知道代码的具体作用,用起来会安心。

假设在多线程的代码中包含了多段的 INSERT 数据库类的方法,那么你调用 Abort 很可能就只能执行了一部分 INSERT 语句,而一部分没执行 导致数据库的这段数据不完整

注意Net3.0以上版本没有About 方法,需要调用 Interrupt 方法。 也可以自行包装一个类型,专门做此类工作。但是感觉上面已经够用了

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天hous

你的鼓励是我最大动力~谢谢啦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值