异步任务与任务

时间:2014-10-06 13:55:59

标签: c# multithreading task

有异步方法FuncAsync和任务对象t。 两者都在做同样的事情,都使用线程池。 这两种策略有什么区别?

class Program
{
    private static async Task<int> FuncAsync(string str)
    {
        string s = await Task.Run(() =>
        {
            Console.WriteLine("{0} <- Pooled?  ID -> {1}", Thread.CurrentThread.IsThreadPoolThread, Thread.CurrentThread.ManagedThreadId);
          //  Thread.Sleep(1000);
            return str;
        });
        return s.Length;

    }

    public static void Main(string[] args)
    {
        Task<int> z = FuncAsync("Text");
        Console.WriteLine(z.Result);
        Task<int> t = Task.Run(() =>
        {
            Console.WriteLine("{0} <- Pooled?  ID -> {1}", Thread.CurrentThread.IsThreadPoolThread, Thread.CurrentThread.ManagedThreadId);
            //  Thread.Sleep(1000);
            return "Text".ToString().Length;
        });
        Console.WriteLine(t.Result);
        Thread.CurrentThread.Join(1000);

        Console.ReadLine();

    }
}

我认为使用Async方法等待结果并且无法在没有完成任务的情况下关闭, 并且使用任务 - 线程是后台,可以在没有完成任务的情况下关闭。

1 个答案:

答案 0 :(得分:0)

一个是可重用的功能,另一个不是。一个将字符串 length 传递回线程,另一个传递整个字符串。这两个实际上都不是异步运行,因为您要立即要求.Result阻塞,直到任务完成(您应该使用await