Reputation: 9
I am using following example .
using System;
using System.Threading;
public class MyThread
{
public void Thread1()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Hello world " + i);
Thread.Sleep(1000);
}
}
}
public class MyClass
{
public static void Main()
{
Console.WriteLine("Before start thread");
MyThread thr1 = new MyThread();
MyThread thr2 = new MyThread();
Thread tid1 = new Thread(new ThreadStart(thr1.Thread1) );
Thread tid2 = new Thread(new ThreadStart(thr2.Thread1) );
tid1.Start();
tid2.Start();
}
}
It works like this.
output :
Before start thread
Hello world 0
Hello world 0
Hello world 1
Hello world 1
Hello world 2
Hello world 2
Hello world 3
Hello world 3
Hello world 4
Hello world 4
Hello world 5
Hello world 5
Hello world 6
Hello world 6
Hello world 7
Hello world 7
Hello world 8
Hello world 8
Hello world 9
Hello world 9
It print i
from first for loop and sleep for 1 sec move to second for loop.It prints i
from second for loop sleep for 1 sec and move to first. I don't want it to context switch after every i
print.I want like this after certain time after printing some value of i
,sleep for some time within that period print value of i
from second loop.After that expire again move back to first loop.
Ex: It suppose to print from 1 to 2-10 from first for loop and sleep move to second,it may print 1 to 2-10 from second for loop.and move to first loop.Value of i from from first loop may not be same for second.
Upvotes: 0
Views: 152
Reputation: 117175
Perhaps try looking at using Microsoft's Reactive Framework. It is designed to do this kind of thing.
Try this code:
var source = Observable.Range(0, 10);
var interval = Observable.Interval(TimeSpan.FromSeconds(1.0));
var query =
Observable
.Merge(
source.Select(n => $"A{n}").Buffer(3),
source.Select(n => $"B{n}").Buffer(3))
.SelectMany(x => x)
.Zip(interval, (n, _) => n);
query.Subscribe(i => Console.WriteLine($"Hello world {i}"));
Here's the output:
Hello world A0 Hello world A1 Hello world A2 Hello world B0 Hello world B1 Hello world B2 Hello world A3 Hello world A4 Hello world A5 Hello world B3 Hello world B4 Hello world B5 Hello world A6 Hello world A7 Hello world A8 Hello world B6 Hello world B7 Hello world B8 Hello world A9 Hello world B9
Notice the groups of 3 lots of the "A"
and "B"
values?
Each line is output one second after the previous one. That can be changed by changing the TimeSpan
in the Interval
operator.
This all happens in background threads (from the thread pool) and it lets you do all sorts of interesting filtering, grouping, querying, composition, etc.
Just NuGet "System.Reactive" and add using System.Reactive.Linq;
to your code.
Upvotes: 0
Reputation: 1759
Do you mean something like this?
class Program
{
static void Main(string[] args)
{
Task.WaitAll
(
Task.Run(() => new Work().DoWork(1)),
Task.Run(() => new Work().DoWork(2))
);
Console.ReadLine();
}
public class Work
{
public void DoWork(int taskNumber)
{
for(int i=0; i < 100; i++)
{
Console.WriteLine("Task {0} Value {1}", taskNumber, i);
}
}
}
}
so you get the following output
Task 1 Value 0
Task 1 Value 1
Task 1 Value 2
Task 1 Value 3
Task 1 Value 4
Task 1 Value 5
Task 1 Value 6
Task 1 Value 7
Task 1 Value 8
Task 1 Value 9
Task 1 Value 10
Task 1 Value 11
Task 1 Value 12
Task 2 Value 0
Task 2 Value 1
Task 2 Value 2
Task 2 Value 3
Task 2 Value 4
Task 2 Value 5
Task 2 Value 6
Task 2 Value 7
Task 2 Value 8
Task 2 Value 9
Task 2 Value 10
Task 2 Value 11
Task 2 Value 12
Task 2 Value 13
Task 2 Value 14
Task 2 Value 15
Task 2 Value 16
Task 2 Value 17
Task 2 Value 18
Task 2 Value 19
Task 2 Value 20
Task 2 Value 21
Task 2 Value 22
Task 2 Value 23
Task 2 Value 24
Task 2 Value 25
Task 2 Value 26
Task 2 Value 27
Task 2 Value 28
Task 2 Value 29
Task 2 Value 30
Task 2 Value 31
Task 2 Value 32
Task 2 Value 33
Task 2 Value 34
Task 2 Value 35
Task 2 Value 36
Task 1 Value 13
Task 1 Value 14
Task 1 Value 15
Task 1 Value 16
Task 1 Value 17
Task 1 Value 18
Task 1 Value 19
Task 1 Value 20
Task 1 Value 21
Task 1 Value 22
Task 1 Value 23
Task 1 Value 24
Task 1 Value 25
Task 1 Value 26
Task 1 Value 27
Task 1 Value 28
Task 1 Value 29
Task 1 Value 30
Task 1 Value 31
Task 1 Value 32
Task 1 Value 33
Task 2 Value 37
Task 2 Value 38
Task 2 Value 39
Task 2 Value 40
Task 2 Value 41
Task 2 Value 42
Task 2 Value 43
Task 2 Value 44
Task 2 Value 45
Task 2 Value 46
Task 2 Value 47
Task 2 Value 48
Task 2 Value 49
Task 2 Value 50
Task 2 Value 51
Task 2 Value 52
Task 2 Value 53
Task 2 Value 54
Task 2 Value 55
Task 1 Value 34
Task 1 Value 35
Task 1 Value 36
Task 1 Value 37
Task 1 Value 38
Task 1 Value 39
Task 1 Value 40
Task 1 Value 41
Task 1 Value 42
Task 1 Value 43
Task 1 Value 44
Task 1 Value 45
Task 1 Value 46
Task 1 Value 47
Task 1 Value 48
Task 2 Value 56
Task 2 Value 57
Task 2 Value 58
Task 2 Value 59
Task 2 Value 60
Task 2 Value 61
Task 2 Value 62
Task 2 Value 63
Task 2 Value 64
Task 2 Value 65
Task 2 Value 66
Task 2 Value 67
Task 2 Value 68
Task 2 Value 69
Task 2 Value 70
Task 2 Value 71
Task 2 Value 72
Task 2 Value 73
Task 2 Value 74
Task 2 Value 75
Task 2 Value 76
Task 1 Value 49
Task 1 Value 50
Task 1 Value 51
Task 1 Value 52
Task 1 Value 53
Task 1 Value 54
Task 1 Value 55
Task 1 Value 56
Task 1 Value 57
Task 1 Value 58
Task 1 Value 59
Task 1 Value 60
Task 1 Value 61
Task 1 Value 62
Task 1 Value 63
Task 1 Value 64
Task 1 Value 65
Task 1 Value 66
Task 1 Value 67
Task 1 Value 68
Task 1 Value 69
Task 2 Value 77
Task 2 Value 78
Task 2 Value 79
Task 2 Value 80
Task 2 Value 81
Task 2 Value 82
Task 2 Value 83
Task 2 Value 84
Task 2 Value 85
Task 2 Value 86
Task 2 Value 87
Task 2 Value 88
Task 2 Value 89
Task 2 Value 90
Task 2 Value 91
Task 2 Value 92
Task 2 Value 93
Task 2 Value 94
Task 2 Value 95
Task 2 Value 96
Task 2 Value 97
Task 2 Value 98
Task 2 Value 99
Task 1 Value 70
Task 1 Value 71
Task 1 Value 72
Task 1 Value 73
Task 1 Value 74
Task 1 Value 75
Task 1 Value 76
Task 1 Value 77
Task 1 Value 78
Task 1 Value 79
Task 1 Value 80
Task 1 Value 81
Task 1 Value 82
Task 1 Value 83
Task 1 Value 84
Task 1 Value 85
Task 1 Value 86
Task 1 Value 87
Task 1 Value 88
Task 1 Value 89
Task 1 Value 90
Task 1 Value 91
Task 1 Value 92
Task 1 Value 93
Task 1 Value 94
Task 1 Value 95
Task 1 Value 96
Task 1 Value 97
Task 1 Value 98
Task 1 Value 99
You OS will give every "Task" time for execute, is the time over it will wait until he get time again. So in this period the Task is "sleeping".
Pls let me now if this work for you.
Upvotes: 2