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秒后执行此代码");
    }
}
相关推荐
devilnumber7 小时前
Java 递归算法 详解 + 核心要点 + 实战运用 + 避坑指南
java·开发语言·算法
asdfg12589638 小时前
JavaBean是什么?怎么理解?有什么用途?
java·开发语言
dsyyyyy11019 小时前
JavaScript变量
开发语言·javascript·ecmascript
z落落10 小时前
C#WinForm 窗体切换与窗体传值(登录跳转案例)+WinForm 窗体传值(从上往下传、从下往上传)
开发语言·windows·c#
allway210 小时前
How to Echo Multiline to a File in Bash [3 Methods]
开发语言·chrome·bash
weixin_4624462310 小时前
手把手教你用 Bash 脚本自动更新 /etc/hosts —— 自动绑定网卡 IP 与节点名
开发语言·tcp/ip·bash
一个梦醒了10 小时前
安装git bash选项推荐
开发语言·git·bash
ct97810 小时前
React 状态管理方案深度对比
开发语言·前端·react
数量技术宅10 小时前
2026量化前沿:从Reddit热帖到Python实战,如何用赫斯特指数(Hurst)狙击虚假突破?
开发语言·python
华如锦11 小时前
面了很多 Java转AI Agent方向,一些面试题总结
java·开发语言·人工智能·python·ai