C#异步编程之:(三)使用TaskScheduler.UnobservedTaskException

当在C#中调用触发方法时不捕获AggregateException,.NET Framework会升级异常。默认情况下,这会在Task析构时重新抛出未处理的异常,导致程序终止。可以通过为System.Threading.Tasks.TaskScheduler.UnobservedTaskException添加事件处理程序来覆盖升级策略,以便在异常被提升时调用自定义代码。书中的示例无法工作,因为Task对象的析构函数永远不会被触发。经过修改,发现实际上只需要一个方法就能处理异常。
摘要由CSDN通过智能技术生成

不多解释,抄书了:

If you don’t catch AggregateException when you call a trigger method, the .NET Framework will escalate the exceptions. By default, this means that the unhandled exceptions will be thrown again when your Task is finalized and cause your program to be terminated. Because you don’t know when the finalizer will be called, you won’t be able to predict when this will happen. But, you can override the escalation policy and supply your own code to call when an exception is escalated. You do this by adding an event handler to the static System.Threading.Tasks.TaskScheduler.UnobservedTaskException member.


书里面的实例根本没法用,永远不会触发Task对象的析构!所以我改写了下,而且书里面是2个方法都用了,其实任何一个方法都能处理异常!


using System;
using System.Collections;
using System.Threading.Tasks;

namespace Listing_22
{
    class Listing_22
    {
        static void Main(string[] args)
    
使用 TaskScheduler.dll 可以很方便地创建、修改和删除 Windows 任务计划。以下是一个简单的 C# 示例,演示如何使用 TaskScheduler.dll 创建一个每天执行一次的任务计划: ```csharp using System; using System.IO; using Microsoft.Win32.TaskScheduler; class Program { static void Main(string[] args) { // 创建一个新的计划任务对象 using (TaskService taskService = new TaskService()) { TaskDefinition taskDefinition = taskService.NewTask(); // 设置任务基本属性 taskDefinition.RegistrationInfo.Description = "My Daily Task"; taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken; taskDefinition.Settings.Enabled = true; // 创建触发器,每天执行一次 DailyTrigger dailyTrigger = new DailyTrigger(); dailyTrigger.Repetition.Interval = TimeSpan.FromDays(1); dailyTrigger.StartBoundary = DateTime.Today.AddHours(9); // 每天 9 点执行 taskDefinition.Triggers.Add(dailyTrigger); // 创建操作,将本地文件复制到远程位置 string sourceFile = @"C:\temp\test.txt"; string destinationPath = @"\\remote\share\test.txt"; CopyAction copyAction = new CopyAction(sourceFile, destinationPath, true); taskDefinition.Actions.Add(copyAction); // 注册任务计划 taskService.RootFolder.RegisterTaskDefinition("My Daily Task", taskDefinition); } } } ``` 在上面的示例中,我们创建了一个名为“My Daily Task”的任务计划,每天 9 点执行。操作是将本地文件复制到远程位置。你可以根据自己的需求修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值