Paralel olarak yürütülen işlemlerin oluşturulması konusunda task mantığı işimizi oldukça kolaylaştırmaktadır. Öncelikle yeni bir taskı nasıl oluşturacağımızdan bahsedelim. System.Threading ve System.Threading.Tasks isimli namespace leri projemize dahil etmemiz gerekmekte.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
private void button1_Click( object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false ; //cross thread exception hatalarına karşı önlem... Task task1 = Task.Factory.StartNew(() => { for ( int i = 0; i <= 30; i++) { Thread.Sleep(500); label1.Text = i + " " ; } }); Task task2 = Task.Factory.StartNew(() => { for ( int j = 0; j <= 30; j++) { Thread.Sleep(500); label2.Text = j + " " ; } }); } |
Yukarıda ki CheckForIllegalCrossThreadCalls = false; satırı ise cross thread exception hatalarını almamamızı sağlar.
Task içerisinde ki işlemi durdurmak için Wait, WaitAll, WaitAny metodları kullanılır.
- Wait:Taskİsmi.Wait();
- WaitAll: Task.WaitAll(TaskİSmi1,Taskİsmi2….);
- WaitAny: Task.WaitAny(Taskİsmi1,Taskİsmi2…);
Benim en çok kullandığım iki metod ise ki bunlar eminim sizler tarafından çok kullanılacaktır, ContinueWith ve IsCompleted metodları. Kullanım şekilleri ise;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
CheckForIllegalCrossThreadCalls = false ; Task task1 = Task.Factory.StartNew(() => { for ( int i = 0; i <= 30; i++) { Thread.Sleep(500); label1.Text = i + " " ; } }) .ContinueWith((task2)=> { for ( int j = 0; j <=30; j++) { Thread.Sleep(500); label2.Text=j+ " " ; } }); |
Burada iki task aynı anda çalışmaya başlar.
IsCompleted metodunsa ise Continuewith metodunda yazmış olduğumuz kod satırlarının sonunda for döngüsünden sonra
1
2
3
4
5
6
7
8
9
10
11
|
for ( int j = 0; j <=30; j++) { Thread.Sleep(500); label2.Text=j+ " " ; } if (task2.IsCompleted== true ) { MessageBox.Show( "task görevi bitti" ); } }); |
Burada ise birinci task sayma işlemini bitirdikten sonra devreye direk 2. task girer.
Umarım işinize yarar bilgiler olmuştur.