📜  如何在 C# 中启动协程(1)

📅  最后修改于: 2023-12-03 14:52:14.689000             🧑  作者: Mango

如何在 C# 中启动协程

协程(Coroutine)是一种轻量级的线程,能够在不创建新的线程的情况下完成异步操作。C# 中可以使用 Microsoft 的协程库 Microsoft.Bot.Builder.Dialogs 来启动协程。

安装协程库

在 Visual Studio 中的解决方案资源管理器中,右键单击项目,选择“管理 NuGet 程序包”。在“浏览”选项卡中搜索 “Microsoft.Bot.Builder.Dialogs”,并安装。

创建协程

协程是一个具有两个参数的委托。其中,第一个参数是返回类型。第二个参数是 yield 表达式或使用 Task.Delay 执行的时间延迟(也可以使用 await Task.Delay)。下面是一个启动协程的示例:

using Microsoft.Bot.Builder.Dialogs;

public async Task TestCoroutine(IDialogContext context)
{
    var routine = new Coroutine<int>(DoSomeWork);
    routine.Resume(0);

    if (routine.Current > 0)
    {
        int result = routine.Current;
        await context.PostAsync($"The result is {result}");
    }
}

public IEnumerator<int> DoSomeWork()
{
    yield return await Task.Delay(1000);
    yield return 5;
}
解释代码

第 3 行中,我们定义了一个协程。其返回类型是 int,所以我们的协程必须返回整型值。协程将要执行的函数称为“委托”。在这个例子中,我们将 DoSomeWork 函数作为协程的委托。

第 4 行中,我们在协程内部调用 Resume 方法,以开始执行协程。Resume 方法的参数是协程委托的参数。在本例中,它是 0。

第 6 行中,我们使用 Current 属性来检查协程的状态。如果协程已经结束并返回结果,Current 属性将包含结果。

第 8-11 行中,我们在 Bot 中打印出结果。

第 13-17 行是 DoSomeWork 函数。它在第一次迭代中暂停了 1 秒,并返回一个整数 5。

结论

在 C# 中启动协程可以使用 Microsoft.Bot.Builder.Dialogs 协程库。协程是一种轻量级的线程,可用于异步操作。要启动协程,需要创建一个具有两个参数的委托,并调用 Resume 方法。在协程内部,可以使用 Current 属性来检查状态。