为什么不能使用Task<> .Result属性? [英] Why can't use Task<>.Result property?

查看:65
本文介绍了为什么不能使用Task<> .Result属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a problem with my tasks. When I try to recive returned variable from my task I can't use a .Result property to get it. Here is my code:

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

和imageHasing函数的声明如下: public bool [] imageHashing(字符串路径)

and imageHasing function is declared like this:public bool[] imageHashing(string path)

我收到一个错误提示:

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

Severity Code Description Project File Line Suppression State Error CS1061 'Task' does not contain a definition for 'Result' and no extension method 'Result' accepting a first argument of type 'Task' could be found (are you missing a using directive or an assembly reference?)

来自

Example from this microsoft website works, and I can't understand why.

推荐答案

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

As others have noted, the compiler error is in your variable declaration (Task does not have a Result property):

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

但是,此代码也有问题.特别是,如果您只是要阻塞当前线程直到完成,则将工作踢到后台线程是没有意义的.您也可以直接调用该方法:

However, this code is also problematic. In particular, it makes no sense to kick work off to a background thread if you're just going to block the current thread until it completes. You may as well just call the method directly:

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

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

Or, if you are on a UI thread and do not want to block the UI, then use await instead of Result:

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

这篇关于为什么不能使用Task&lt;&gt; .Result属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆