异步任务vs任务
有异步方法FuncAsync
和任务对象t。 两者都在做同样的事情,都使用线程池。 这两种策略有什么区别?异步任务vs任务
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();
}
}
我认为,随着异步方式等待结果,并不能接近完成没有任务, 与任务 - 线程被背景和可能没有完成任务被关闭。
一个是可重用的函数,另一个不是。一个将字符串长度传回线程,另一个传递整个字符串。因为您立即要求.Result
阻塞,直到任务完成(您应该使用await
代替)
他不能在'Main'内使用'await'。 – 2014-10-06 14:12:02
是的,但他不应该打扰Task.Run后立即task.Result要么:) – 2014-10-06 14:13:26
真的......真的:)我不认为他的代码有太多的意义。 – 2014-10-06 14:13:57
没有太多,除非您有'任务'的情况下使用匿名方法和更多管道代码。 – Mrchief 2014-10-06 14:07:37
听起来像你只是需要阅读'async/await'的介绍教程。 – Servy 2014-10-06 14:15:26
@Servy我认为是)) – 2014-10-06 14:21:32