using System; using System.Threading; using System.Threading.Tasks; using ETModel; namespace Example2_2_2 { class Program { private static int loopCount = 0; static void Main(string[] args) { SynchronizationContext.SetSynchronizationContext(OneThreadSynchronizationContext.Instance); Console.WriteLine($"主线程: {Thread.CurrentThread.ManagedThreadId}"); Crontine(); while (true) { OneThreadSynchronizationContext.Instance.Update(); Thread.Sleep(1); ++loopCount; if (loopCount % 10000 == 0) { Console.WriteLine($"loop count: {loopCount}"); } } } private static async void Crontine() { await WaitTimeAsync(5000); Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}"); await WaitTimeAsync(4000); Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}"); await WaitTimeAsync(3000); Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}"); } private static Task WaitTimeAsync(int waitTime) { TaskCompletionSource tcs = new TaskCompletionSource(); Thread thread = new Thread(()=>WaitTime(waitTime, tcs)); thread.Start(); return tcs.Task; } /// /// 在另外的线程等待 /// private static void WaitTime(int waitTime, TaskCompletionSource tcs) { Thread.Sleep(waitTime); Console.WriteLine($"SetResult线程: {Thread.CurrentThread.ManagedThreadId}"); tcs.SetResult(true); } } }