为什么不能使用任务<>。结果属性?



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

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

和图像Hasing函数是这样声明的:public bool[] imageHashing(string path)

我收到一个错误:

严重性代码说明项目文件行抑制状态 错误 CS1061"任务"不包含"结果"的定义,并且没有 扩展方法"结果"接受类型为"任务"的第一个参数 可以找到(您是否缺少使用指令或程序集 参考?

这个微软网站的例子有效,我不明白为什么。

正如其他人所指出的,编译器错误在您的变量声明中(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));

您应该将缓冲变量声明为Task<byte[]> buffering = Task<byte[]>.Run(() => imageHashing(nextElement));

您应该对缓冲变量使用Task<bool[]>。不指定类型意味着操作不应返回任何结果。

最新更新