我可以在C#中使用async / await inline吗?

时间:2018-03-09 18:54:36

标签: c#

我有代码,它运行一些块异常。如何使LongOperation()无异常地运行" inline"方式(直接来自Main方法)而不创建LongTask()和LongOperationAsync()函数?

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");
    }

}

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");
    }
}

1 个答案:

答案 0 :(得分:1)

你可以使用 GetAwaiter()。GetResult()

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

this SO问题

中详细了解相关信息