我的任务有问题。当我尝试从我的任务中接收返回的变量时,我无法使用.结果属性来获取它。这是我的代码:
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[]>
。不指定类型意味着操作不应返回任何结果。