gpt4 book ai didi

c# - 如何在没有 Task.Result 的情况下通过 await 从异步方法中准确获取结果?

转载 作者:太空狗 更新时间:2023-10-30 00:39:48 25 4
gpt4 key购买 nike

我想尝试使用 async 和 await,但失败了。我有需要异步运行两个方法的方法(部分有效)

public void Run()
{
Task[] tasks = new Task[2];
tasks[0] = Task.Factory.StartNew(DisplayInt);
tasks[1] = Task.Factory.StartNew(DisplayString);

//block thread until tasks end
Task.WaitAll(tasks);
}

以及使用的两种方法

public async void DisplayInt()
{
Task<int> task = new Task<int>(
() => 10);
task.Start();
Console.WriteLine(await task);
}

public async void DisplayString()
{
Task<string> task = new Task<string>(
() => "ok" );
task.Start();
Console.WriteLine(await task);
}

通常我会得到下一个结果:1) 10 ok

或者2)好的10

但有时我得到 3) 没有

如何在不使用 task.Result 的情况下通过 await 从异步方法中准确获取结果,否则它就不会发生?

最佳答案

我建议您阅读一些介绍性文章,例如我自己的文章 async intro ,然后用我的 MSDN article on async best practices 跟进.如果你只是敲代码,你最终会遇到很多痛苦。

特别是你should not use Task.Factory.StartNew , the Task constructor , nor Task.Start ;并且您应该避免 async void(所有链接都指向我的博客,我在其中详细解释了原因)。

回答您的实际问题:

How to get exactly result from async methods via await without using task.Result or it cannot happen?

要从任务中获取结果,您可以异步等待任务完成(通过 await),也可以同步(阻塞)等待任务完成(通过 >结果)。没有“其他方式”,如果那是您要问的。

关于c# - 如何在没有 Task.Result 的情况下通过 await 从异步方法中准确获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com