2017-08-11 212 views
-1

我的任務有問題。當我嘗試從我的任務中收回返回的變量時,我無法使用.Result屬性來獲取它。這裏是我的代碼:爲什麼不能使用Task <>。Result屬性?

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

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

我得到一個錯誤saing:

嚴重性代碼說明項目文件的線路抑制狀態 錯誤CS1061「任務'不包含'結果'的定義,並且沒有 擴展方法'結果'接受第一個參數類型'任務' 可以找到(你是否缺少使用指令或程序集 參考?)

this microsoft website例如作品,我不明白爲什麼。

+6

好,好消息,因爲你在這裏使用Task是完全沒有意義的。您正在阻止當前線程,因此您可以直接調用imageHashing並跳過Task.Run。 – Will

+3

你需要聲明它爲'任務'。看到[這個問題](https://stackoverflow.com/questions/11333297/threading-tasks-task-does-not-contain-a-definition-for-result)的解釋。 –

+0

或者使用var而不是 –

回答

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線程,不想阻止用戶界面,然後用await代替Result

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

您應該使用Task<bool[]>作爲緩衝變量。不指定類型意味着該操作不會返回任何結果。

-2

你應該申報緩衝變量Task<byte[]> buffering = Task<byte[]>.Run(() => imageHashing(nextElement));

相關問題