如何在没有等待opeartor的情况下获得返回值

Pan*_*ndi 5 .net c# asynchronous async-await

我需要在没有await运算符的情况下获取返回值(在下面的示例中,我需要"hello world"var y没有await运算符的情况下获取).因为一个方法被引用到很多地方.但我的要求是对于特定操作异步执行方法.没有其他时间它足以同步执行.

如果我在所有引用的位置等待,方法需要更改为异步,并且引用的方法需要更改为async和await.是否有可能获得返回值?

请在下面找到示例代码段:

class Program
{
    static void Main(string[] args)
    {
        var x = getString();
    }

    public static async Task<string> getString()
    {
        var y = await GetString2();
        return y;
    }

    public static async Task<string> GetString2()
    {
        return "hello world";
    }

}
Run Code Online (Sandbox Code Playgroud)

var y没有等待运算符的情况下,有没有可能获得"hello world"字符串?

Mis*_*tyK 7

我不会使用 Result 因为如果抛出错误,你会得到 AggregateException。最好这样做:

var str = GetString2().GetAwaiter().GetResult()


luc*_*cky 6

你在找类似的东西吗?

var str = GetString2().Result;
Run Code Online (Sandbox Code Playgroud)

Result阻塞调用线程,直到异步操作完成; 它等同于Wait方法.await异步等待任务完成.

另外,正如@Sir Rufo和@MistyK所描述的那样,你会遇到AggregateException一个可能的异常,所以最好这样使用GetAwaiter;

var str = GetString2().GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用task.GetAwaiter()获取未等待任务的结果.GetResult() (2认同)