我正在尝试掌握 .NET 4.0+ 任务并行库概念......
在以下 C# 4.0 代码片段中:
Task t = Task.Factory.StartNew(() =>
{
Console.WriteLine("I am the task");
return "res1";
});
如果不能使用返回值,除非使用通用任务,否则为什么编译器(以及运行时)不会产生任何错误:
Task<string> t = Task.Factory.StartNew(() =>
{
Console.WriteLine("I am the task");
return "res1";
});
或者它(返回的对象)可以使用?
我的理解正确吗<string>
in Task<string>
仅在检测或确保返回类型(ed 对象)或t.Result
?
或者除了这个之外还有其他隐藏的必需品吗?
为什么不能从返回对象的类型判断这个类型?
IE。为什么任务的 Result 属性对于非通用任务不可用?
非泛型Task
没有Result
属性,因为它代表一个过程not产生一个结果。
您的代码创建了一个Task<string>
在这两种情况下,但在第一种情况下,您将其转换为Task
(Task<string>
源自于Task
,所以这是合法的),因此您失去了引用结果的能力。
您可以直接使用以下命令查看:
Task t = Task.Factory.StartNew(() =>
{
Console.WriteLine("I am the task");
return "res1";
});
var genericTask = t as Task<string>; // genericTask will be non-null
var result = genericTask.Result; // and you can access the result
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)