C#同步异步方法互调(.NET Fromework 4.6.1)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace 同步异步互调 { class Program { static void Main(string[] args) { var p = new Program(); p.DoSyncWork();// 同步方法调用异步方法 Task s = p.DoAsyncWork(); // 异步调用同步 s.Wait();// 上一句是异步,必须等待,否则异步还没执行完,主main就已经结束了 //Console.ReadKey(); } /// <summary> /// 一个同步方法 如何调用异步 /// </summary> public void DoSyncWork() { // 创建异步任务 Task<int> asyncTask = SomeAsyncMethod(); //同步等待任务完成 asyncTask.Wait(); // 获取异步操作的结果 int result = asyncTask.Result; // 在这里继续处理结果... } // 虚拟的异步方法 public async Task<int> SomeAsyncMethod() { // 使用异步操作等待一段时间,模拟真实的异步计算 await Task.Delay(1000); // 返回一些异步计算的结果 return 42; } // 异步调用同步 public async Task DoAsyncWork() { await Task.Run(() => { // 执行同步代码... var r = SyncMethod(); // 注意:避免在同步操作中使用阻塞调用,以免降低异步代码的性能 Console.WriteLine($"{r}"); }); // 继续执行异步操作或处理结果... } // 同步耗时方法 public string SyncMethod() { Thread.Sleep(3000); Console.WriteLine($"ThreadId:{Thread.CurrentThread.ManagedThreadId}"); return "完成"; } } }