繁体   English   中英

异步/等待-Vicious Circle C#5.0

[英]Async/Await - Vicious Circle C# 5.0

代码如下。

我想异步调用DoLongWork函数。

但是代码最终以同步方式结束,因为DoLongWork没有等待任何东西。

不需要等待DoLongWork函数中的某些内容。 因为函数本身是长期运行的。 没有等待任何资源。

我如何摆脱这个恶性循环?

 class Program
    {
        static void Main(string[] args)
        {
            Task<int> task = Foo("Something");
            Console.WriteLine("Do it");
            Console.WriteLine("Do that");
            task.Wait();
            Console.WriteLine("Ending All");
        }
        static async Task<int> Foo(string param)
        {
            Task<int> lwAsync = DoLongWork(param);
            int res = await lwAsync;
            return res;
        }

        static async Task<int> DoLongWork(string param)
        {
            Console.WriteLine("Long Running Work is starting");
            Thread.Sleep(3000); // Simulating long work.
            Console.WriteLine("Long Running Work is ending");
            return 0;
        }
    }

您可以使用Task.Run在后台线程上执行同步工作:

// naturally synchronous, so don't use "async"
static int DoLongWork(string param)
{
    Console.WriteLine("Long Running Work is starting");
    Thread.Sleep(3000); // Simulating long work.
    Console.WriteLine("Long Running Work is ending");
    return 0;
}

static async Task<int> FooAsync(string param)
{
    Task<int> lwAsync = Task.Run(() => DoLongWork(param));
    int res = await lwAsync;
    return res;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM