第二十章 非同步和檔案I O (十六)

2021-09-19 18:07:12 字數 885 閱讀 9838

await task.run(() =>

);

雖然您可以將task.run本身與其他**一起使用,但通常它用於構造非同步方法。 按照慣例,非同步方法的字尾為async。 該方法返回task物件(如果方法不返回任何值或物件)或task 物件(如果它確實返回了某些東西)。

以下是如何建立乙個返回task的非同步方法:

task mymethodasync(__)

);}

task.run方法返回您的方法也返回的task物件。 task.run的action引數可以使用傳遞給mymethodasync的任何引數,但不應使用ref或out定義任何引數。 另外,請注意您傳遞給mymethodasync的任何引用型別。 這些都可以從非同步**內部和方法外部訪問,因此您可能需要實現同步,以便不會從兩個執行緒同時訪問該物件。

task.run呼叫中的**本身可以使用await呼叫非同步方法,但在這種情況下,您需要使用async標記傳遞給task.run的lambda函式:

return task.run(async () =>

);

如果非同步方法返回某些內容,您將使用task的通用形式和task.run的通用形式來定義方法:

taskmymethodasync(…)

);}

從lambda函式返回的值或物件將成為從task.run和您的方法返回的task 物件的result屬性。

如果需要對後台程序有更多控制權,可以使用taskfactory.startnew而不是task.run來定義非同步方法。

基本的task.run模式有一些變化,正如您將在以下幾個程式中看到的那樣。 這些程式計算並顯示著名的mandelbrot集。

第二十章 非同步和檔案I O (二十)

乙個mvvm mandelbrot xamarin.forms 以這種方式為畫素著色。該程式還允許放大特定位置。這是mandelbrot集的乙個特徵,無論你放大多遠,影象仍然很有趣。不幸的是,基於doubleprecision浮點數的解析度,縮放存在實際限制。該程式使用mvvm原理進行架構,雖然在看...

第二十章 非同步和檔案I O (二十)

乙個mvvm mandelbrot xamarin.forms 以這種方式為畫素著色。該程式還允許放大特定位置。這是mandelbrot集的乙個特徵,無論你放大多遠,影象仍然很有趣。不幸的是,基於doubleprecision浮點數的解析度,縮放存在實際限制。該程式使用mvvm原理進行架構,雖然在看...

第二十章 Skeletal Animation

skeletal animation 骨骼動畫 是指互相連線的變換 骨頭 組成的分層集合,以及對應的模型mesh 即骨骼的 當這些變換隨著時間變化而變化時,模型的mesh就會形成動畫效果。本章,我們將會 skeketal animation,並開發一些系統用於支援模型動畫。把乙個skeleton對映...