C#同步异步方法互调(.NET Fromework 4.6.1)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 "完成";
        }
    }
}

  

posted @   海阔天空XM  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示