异步操作的例子
Action<object> action = (object obj) =>
{
Console.WriteLine("线程锁={0}, 线程名={1}, 主线={2}", Task.CurrentId, obj.ToString(), Thread.CurrentThread.ManagedThreadId);
};
Task t1 = new Task(action, "线程1");
Task t2 = Task.Factory.StartNew(action, "线程2");
t2.Wait();
t1.Start();
Console.WriteLine("线程1 已经启动(主线程 ={0})", Thread.CurrentThread.ManagedThreadId);
t1.Wait();
Task t3 = new Task(action, "线程3");
t3.RunSynchronously();
t3.Wait();
示例2
ManualResetEventSlim resetEvent = new ManualResetEventSlim(false, 100);
int i = 0;
Task t1 = Task.Factory.StartNew(() =>
{
do
{
Console.WriteLine("Task t1. i is {0}", i);
i++;
} while (i < 10);
resetEvent.Set();
});
Task t2 = Task.Factory.StartNew(() =>
{
resetEvent.Wait();
Console.WriteLine("Task t2. i is {0}", i);
});
Task.WaitAll(t1, t2);
CountdownEvent countDown = new CountdownEvent(5);
Task countDownWaitTask = Task.Factory.StartNew(() =>
{
countDown.Wait();
Console.WriteLine("倒计时事件已发出5次");
});
Task countDownSignalTask = Task.Factory.StartNew(() =>
{
for (i = 0; i < 5; i++)
{
Console.WriteLine("倒计时活动信号");
countDown.Signal();
}
});
Task.WaitAll(countDownWaitTask, countDownSignalTask);