C Task await 及其它語法糖

2021-10-07 06:11:30 字數 3189 閱讀 8114

private async taskwaitint()

);}

task同步器 task.whenall 

public async void test()

);taskt2 = task.run(() =>

);await task.whenall(t1, t2);

console.writeline(t1.result + t2.result);

}

使用cancellationtokensource 取消非同步程序

cancellationtokensource _cts = new cancellationtokensource();

await task.run(() =>

}, _cts.token);

建立任務的4種方法:

public void test()

建立單獨執行緒的任務以長時間執行

task t4 = new task(() => console.writeline(4),taskcreationoptions.longrunning);

t4.start();

建立連續執行的任務:

private void dofirst()

private void dosecond(task t)

public void tst()

//var t2 = t1.continuewith(dosecond);

//var t3 = t2.continuewith(dosecond);

//var t4 = t3.continuewith(dosecond);

t1.start();

}

建立元組:

tuple.create(1, 2);
可空型別轉換方法:

1,用hasvalue;2,用雙引號

int? a = 0;

int b = a.hasvalue ? a.value : -1;

int c = a ?? -1;

c# 7.2開始為引數新增了乙個in修飾符,out修飾符允許你通過引數返回值,而in操作符則保證傳遞給方法的資料不會發生任何改變(當傳遞的是乙個值型別時)。 相當於c++中引數加const

out 引數可以先不宣告

string input2 = readline();

if (int.tryparse(input2, out int result2))

");}

else

可以使用列舉型別裡的多個常量同時給乙個變數進行賦值,只不過想這麼做,需要將列舉型別裡的常量都定義成bit型別,並且對列舉型別使用flags進行修飾。下面這個列舉daysofweek:

[flags]

public enum daysofweek

呼叫基類的構造方法 

public class ellipse : shape

}

建構函式總是按照類的繼承順序依次呼叫的。system.object的建構函式總是第乙個,然後挨個呼叫,直到編譯器遇到要例項化的那個類為止。

過載建構函式之間的呼叫this()

public class test

// this()對應無參構造方法test()

// 先執行test(),後執行test(string text)

public test(string text) : this()

}

public,protected,private是邏輯訪問修飾符,而internal則是物理訪問修飾符,它是按程式集來界定的。

用 as和is進行父子類的轉換

as運算子和強制轉換操作符很類似,都是轉換物件,返回乙個引用。但是在轉換失敗時,as運算子不會丟擲乙個invalidcastexception異常,而是返回乙個空引用。在使用as運算子之前最好先判斷一下引數o是否為null,如果對null值進行as轉換會直接丟擲乙個nullreferenceexception。

除了as運算子之外,你還可以使用is運算子。is運算子會根據某個物件是否是指定型別返回true和false。假如表示式返回的是true值,則將該物件轉換成指定型別並賦值給隨後的變數。

泛型類變數並不允許你直接賦乙個null值。這是因為泛型型別允許例項化成值型別,null只能給引用型別賦初值。為了繞過這個難關,你可以使用default關鍵字。通過default關鍵字,null值將被賦值給引用型別,而0將被賦值給值型別。

根據上下文的不同,default關鍵字擁有多種含義。在switch語句裡使用default來宣告default case,而在泛型裡default則是用來初始化泛型型別為null或者0。

我們用tdocument來代替t作為泛型標識,並使用where關鍵字定義tdocument需要實現idocument介面

public class documentmanagerwhere tdocument: idocument

約束

描述where t : struct

t必須是值型別。

where t : class

t必須是引用型別。

where t : ifoo

t必須實現介面ifoo。

where t : foo

t必須派生自foo。

where t : new()

t必須帶有無參建構函式。

where t1 : t2

泛型t1必須派生自泛型t2。

注意:c#裡where語句的乙個重要限制就是無法定義泛型t需要實現某種運算子。運算子也無法在介面裡定義,通過where語句僅僅能約束基礎類,介面和無參建構函式。 

泛型協變和逆變

using語句:使用try finally 即使在處理過程**現了異常,也可以確保實現idispose介面的物件呼叫dispose()方法,來釋放物件使用的任意資源,但如果總是重複這樣的結構,**很容易被混淆,使用using關鍵字在物件超出作用域時,該物件自動呼叫dispose()方法

OPENCV版權及其它

最近幾天,工信部花錢替使用者買單,要求電腦預裝過濾軟體 真所謂是花了龍種的錢,買了跳蚤的卵。其實還有乙個受到關注的問題,就是使用了opencv的核心庫以及人臉檢測的訓練庫。關於opencv,由於一直是開發源 的,也因為它擁有大量的影象處理和計算機視覺處理的基本演算法與函式,目前越來越受到研究人員和工...

家庭雲及其它(中)

基本上0bug老師對自己的需求還是比較清楚的,所以沒有選擇nas產品,也沒有選擇企業級伺服器都是很正確的。當然選擇apu算是乙個小失誤,這個方案更適合做htpc,而不是家用伺服器,n550不論從功耗還是發熱上,都優於e350的方案。當然選n550的話肖老師也會碰到乙個杯具 n550最大只支援2g記憶...

關於系統設計及其它

1.看到手頭的一套系統,用struts,它定義了乙個基類action,使用了許多例項變數。這是極其糟糕,錯誤的設計。因為struts的action內建是單一例項的,但web環境是多執行緒。在訪問量達到一定數量時,系統將錯誤百出。這種問題必須避免。乙個原則,在struts的action類裡,不要定義任...