首页 > Windows开发 > 详细

C# Task(任务调度)

时间:2021-06-07 20:10:28      阅读:65      评论:0      收藏:0      [点我收藏+]

案例一、执行顺序
//后执行,说明只是允许 Task t = new Task(() =>}) 这行代码,并不等待过程
Task t = new Task(() =>
{
System.Windows.Application.Current.Dispatcher.Invoke(() => {
Thread.Sleep(5000);
this.Title = "hello";
});
});
task.Start();
//先执行
this.Title = "hi";

任务Task创建方式
方式一、
Task task = new Task(() =>{});
task.Start();

有返回值的方式
先执行Task
Task<int> task = new Task<int>(() => {
return 0;
});
其次执行ContinueWith
task.ContinueWith(t =>
{
int result = t.Result;
});
task.Start();

方式二、
var t = new Task(() => TaskMethod("Task 2"));
t.Start();

方式三、
Task.Run(() => TaskMethod("Task 3"));

方式四、直接异步的方法
Task.Factory.StartNew(() => TaskMethod("Task 3"));

Task任务并行
List<Task> taskList = new List<Task>();
taskList.Add(Task.Run(() =>
{

}));
taskList.Add(Task.Run(() =>
{

}));
taskList.Add(Task.Run(() =>
{

}));
//主线程阻塞,等待结束
Task.WaitAll(taskList.ToArray());
主线程 Code ....执行

方式三、异步非阻塞
Task[] tlist = new Task[] {
Task.Factory.StartNew(() => {
Thread.Sleep(3000);
}),
Task.Factory.StartNew(() => {
Thread.Sleep(90000);
})
};
Task.WhenAny(tlist).ContinueWith((s) => {
return s;
});

使用IProgress实现异步编程的进程通知
private void btnSub_Click(object sender, RoutedEventArgs e)
{
Task task = Display();
}
void DoProcessing(IProgress<int> progress)
{
if (progress != null)
{
progress.Report(1);
}
}

async Task Display()
{
//当前线程
var progress = new Progress<int>(percent =>
{
this.Title = percent.ToString();
});
//线程池线程
await Task.Run(() => DoProcessing(progress));
}

C# Task(任务调度)

原文:https://www.cnblogs.com/microsoft-zh/p/14859640.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!