TASK学习笔记

C#Task学习https://www.cnblogs.com/yaosj/p/10342883.html

补充:

1.父任务和子任务也可能不在同一线程上

Task task1 = new Task(()=> 
            {
                MessageBox.Show($"父任务线程ID:{Thread.CurrentThread.ManagedThreadId}");
                Task.Factory.StartNew(() =>
                {
                    MessageBox.Show($"子任务线程ID:{Thread.CurrentThread.ManagedThreadId}");
                },TaskCreationOptions.AttachedToParent);
                
            });
            task1.Start();

2. ContineWith和task可能不在同一线程上

private static void fun16()        
{          
  Task.Factory.StartNew(() =>             
   {                 
       Console.WriteLine($"task {Thread.CurrentThread.ManagedThreadId}");    }).ContinueWith(t =>             
   {                 
       Console.WriteLine($"ContinueWith {Thread.CurrentThread.ManagedThreadId}");    
   });        
}

回到顶部

二. TaskCreationOptions

 Task.Factory.StartNew和创建Task类可以带TaskCreationOptions参数而Task.Run不可以带

//
// 摘要:
//     指定应使用默认行为。
None = 0,
//
// 摘要:
//     提示 System.Threading.Tasks.TaskScheduler 以一种尽可能公平的方式安排任务,这意味着较早安排的任务将更可能较早运行,而较晚安排运行的任务将更可能较晚运行。
PreferFairness = 1,
//
// 摘要:
//     指定任务将是长时间运行的、粗粒度的操作,涉及比细化的系统更少、更大的组件。 它会向 System.Threading.Tasks.TaskScheduler
//     提示,过度订阅可能是合理的。 可以通过过度订阅创建比可用硬件线程数更多的线程。 它还将提示任务计划程序:该任务需要附加线程,以使任务不阻塞本地线程池队列中其他线程或工作项的向前推动。
LongRunning = 2,
//
// 摘要:
//     指定将任务附加到任务层次结构中的某个父级。 默认情况下,子任务(即由外部任务创建的内部任务)将独立于其父任务执行。 可以使用 System.Threading.Tasks.TaskContinuationOptions.AttachedToParent
//     选项以便将父任务和子任务同步。 请注意,如果使用 System.Threading.Tasks.TaskCreationOptions.DenyChildAttach
//     选项配置父任务,则子任务中的 System.Threading.Tasks.TaskCreationOptions.AttachedToParent 选项不起作用,并且子任务将作为分离的子任务执行。
//     有关详细信息,请参阅附加和分离的子任务。
AttachedToParent = 4,
//
// 摘要:
//     指定任何尝试作为附加的子任务执行(即,使用 System.Threading.Tasks.TaskCreationOptions.AttachedToParent
//     选项创建)的子任务都无法附加到父任务,会改成作为分离的子任务执行。 有关详细信息,请参阅附加和分离的子任务。
DenyChildAttach = 8,
//
// 摘要:
//     防止环境计划程序被视为已创建任务的当前计划程序。 这意味着像 StartNew 或 ContinueWith 创建任务的执行操作将被视为 System.Threading.Tasks.TaskScheduler.Default
//     当前计划程序。
HideScheduler = 16

 三.CancellationToken 取消任务

 

 

 

.....

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值