C#异步Task,await,async和Unity同步协程

标题

Task

Task是声明异步任务的必要关键字,也可以使用Task<>泛型来定义Task的返回值。

await

await是用于等待一个Task结束,否则让出该线程控制权,让步给其他线程,直到该Task结束才往下运行。

async

异步声明的关键词。

举例:

MyTask声明了一个Task,该Task又匿名函数定义不接受参数,并且函数主体是睡觉1秒。Task.Run用于分配线程资源,如果该任务完成就归还线程资源到线程池,后续await task等待该函数完成,并且打印信息。

csharp 复制代码
namespace ConsoleApp1
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            Program program = new Program();
            await program.MyTask();
        }

        public async Task MyTask()
        {
            Task task = Task.Run(() =>
            {
                Thread.Sleep(1000);
            });

            await task;

            Console.WriteLine("This is Task");

        }
    }
}

Unity协程

协程是同步的,由主线程调度。

csharp 复制代码
public class CoroutineExample : MonoBehaviour
{
    void Start()
    {
        // 启动协程
        StartCoroutine(MyTask());
    }

    IEnumerator MyTask()
    {
        Debug.Log("开始任务");
        
        // 等待1秒
        yield return new WaitForSeconds(1f);
        
        Debug.Log("1秒后执行此代码");
    }
}
相关推荐
IT猿手13 小时前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划
炸膛坦客13 小时前
单片机/C/C++八股:(十六)C 中 malloc/free 和 C++ 中 new/delete 有什么区别?
c语言·开发语言·c++
@insist12313 小时前
软件设计师-组网技术基础:网络设备、传输介质与局域网核心协议
开发语言·网络·软考·软件设计师·软件水平考试
CSDN_Colinw13 小时前
C++中的工厂方法模式
开发语言·c++·算法
liulilittle13 小时前
范围随机算法实现
开发语言·c++·算法·lua·c·js
乌索普-13 小时前
基于vue2的简易购物车
开发语言·前端·javascript
走粥13 小时前
使用indexOf查找对象结合Pinia持久化引发的问题
开发语言·前端·javascript
csbysj202013 小时前
Python break 语句详解
开发语言
2401_8579182913 小时前
C++中的访问者模式实战
开发语言·c++·算法
格林威13 小时前
工业相机图像高速存储(C++版):RAID 0 NVMe SSD 阵列暴力提速,附海康实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机