为什么不能使用Task<> .Result属性?

时间:2017-08-11 12:57:25

标签: c# task

我的任务有问题。当我尝试从我的任务中恢复返回的变量时,我无法使用.Result属性来获取它。这是我的代码:

var nextElement = dir.GetValue(i++).ToString();
Task buffering = Task<byte[]>.Run(() => imageHashing(nextElement));
bitmapBuffer = buffering.Result;

和imageHasing函数声明如下:public bool[] imageHashing(string path)

我收到错误消息:

  

严重级代码描述项目文件行抑制状态   错误CS1061&#39;任务&#39;不包含&#39;结果&#39;的定义和不   扩展方法&#39;结果&#39;接受类型&#39;任务&#39;的第一个参数。   可以找到(你错过了使用指令或程序集   引用?)

this microsoft website的示例有效,我无法理解原因。

1 个答案:

答案 0 :(得分:3)

正如其他人所说,编译器错误在您的变量声明中(Task没有Result属性):

var nextElement = dir.GetValue(i++).ToString();
var buffering = Task.Run(() => imageHashing(nextElement));
bitmapBuffer = buffering.Result;

但是,此代码也存在问题。特别是,如果您只是阻止当前线程直到完成,那么将工作转移到后台线程是没有意义的。您也可以直接调用该方法:

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = imageHashing(nextElement);

或者,如果您在UI线程上并且不想阻止UI,那么请使用await而不是Result

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = await Task.Run(() => imageHashing(nextElement));