目录
前言公共方法1.Task与TaskFactory的使用细则2.Parallel3.TaskAdvanced
前言
1.此内容分三块Task的讲解和大部分的使用方法,Parallel,TaskAdvanced。
2.里边的各块内容都是分块的,可以直接拷到一个窗体应用程序中,然后项目输出的时候选择控制台。数据会打印到控制台,显示效果。
公共方法
private void DoSomethingLong(string name
)
{
Console
.WriteLine($
"****************DoSomethingLong Start {name} {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
long lResult
= 0;
Thread
.Sleep(2000);
Console
.WriteLine($
"****************DoSomethingLong End {name} {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")} {lResult}***************");
}
private void Coding(string v1
, string v2
)
{
Console
.WriteLine($
"Coding:v1{v1}v2{v2}");
}
private void Teach(string v
)
{
Console
.WriteLine("Teach:" + v
);
}
1.Task与TaskFactory的使用细则
#region 如何启动任务
#endregion
#region Task分配的任务是来自于线程池
#endregion
{
}
{
}
{
}
{
}
}
{
}
#region Sleep 和 Delay 的区别
{
}
#endregion
{
}
{
}
{
}
{
}
{
}
Console
.WriteLine($
"****************btnTask_Click End {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
2.Parallel
Console
.WriteLine($
"****************btnParallel_Click Start {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
{
Parallel
.Invoke(() => this.DoSomethingLong("btnParallel_Click_1"),
() => this.DoSomethingLong("btnParallel_Click_2"),
() => this.DoSomethingLong("btnParallel_Click_3"),
() => this.DoSomethingLong("btnParallel_Click_4"),
() => this.DoSomethingLong("btnParallel_Click_5"));
}
{
}
{
}
{
}
{
}
{
}
Console
.WriteLine($
"****************btnParallel_Click End {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
3.TaskAdvanced
private void button2_Click(object sender
, EventArgs e
)
{
Console
.WriteLine($
"****************button2_Click Start {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
{
#region 多线程异常处理
{
}
#endregion
#region 线程取消 怎么做?
{
{
}
{
}
}
#endregion
#region 临时变量
{
for (int i
= 0; i
< 5; i
++)
{
int k
= i
;
Task
.Run(() =>
{
Console
.WriteLine($
"ThreadID={Thread.CurrentThread.ManagedThreadId.ToString("00")}_i={i}__ k={ k}");
});
}
}
#endregion
#region 线程安全&lock
{
{
}
{
}
}
#endregion
}
{
}
{
{
}
{
}
{
List
<int> tasklist
= new List<int>();
for (int i
= 0; i
< 10000; i
++)
{
int k
= i
;
Task
.Run(() =>
{
lock (obj_Forom
)
{
tasklist
.Add(k
);
}
});
}
Console
.WriteLine($
"tasklist:{tasklist.Count()}");
}
string str01
= "Richard";
string str02
= "Richard";
}
Console
.WriteLine($
"****************button2_Click End {Thread.CurrentThread.ManagedThreadId.ToString("00")} {DateTime.Now.ToString("yyyy
-MM
-dd HH
:mm
:ss
.fff
")}***************");
}
private static readonly object obj_Forom
= new object();
private int SyncNo
= 0;
private int ASyncNo
= 0;