我可以在 C# 中使用 async/await 内联吗

Lia*_*han 7 c#

我有代码,它异步运行一些块。如何在不创建 LongTask() 和 LongOperationAsync() 函数的情况下使 LongOperation() 以“内联”方式(直接从 Main 方法)异步运行?

class Program
{
    static void Main(string[] args)
    {
        LongOperationAsync();
        Console.WriteLine("Main thread finished.");
        Console.ReadKey();     
    }

    static void LongOperation()
    {
        Thread.Sleep(3000);
        Console.WriteLine("Work completed");
    }

    static Task LongTask()
    {
        return Task.Run(() => LongOperation());
    }

    static async void LongOperationAsync()
    {
        await LongTask();
        Console.WriteLine("Callback triggered");
    }

}
Run Code Online (Sandbox Code Playgroud)

UPD

我希望我做对了。我的意思是,我想让任何现有函数异步并在执行后添加一些操作而不添加任何新函数。似乎下面的解决方案正在起作用。

class Program
{

    static void Main(string[] args)
    {

        ((Action)(async () =>
        {
            await Task.Run(() => LongOperation());
            Console.WriteLine("Then callback triggered");
        }))();

        Console.WriteLine("Main thread finished first.");


        Console.ReadKey();

    }

    static void LongOperation()
    {
        Thread.Sleep(3000);
        Console.WriteLine("Work completed");
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*und 7

您可以使用GetAwaiter().GetResult()

static void Main(string[] args)
{
    Console.WriteLine(v);
    LongOperationAsync().GetAwaiter().GetResult();
    Console.WriteLine("Main thread finished.");
    Console.ReadKey();     
}
Run Code Online (Sandbox Code Playgroud)

这个SO 问题中阅读更多相关信息