C 每天進步一點 非同步程式設計模式

2022-01-20 16:38:06 字數 1612 閱讀 2972

c#可以有乙個簡單易用的機制用於非同步執行方法,那就是委託。下面我介紹三種模式,對於這三種模式來說,原始執行緒都發起了乙個非同步方法,然後做一些其他處理。然而這些模式不同的是,原始執行緒獲取發起的執行緒已經完成的訊息的方式。

1:在等待一直到完成(wait-nutil-done)模式。

在發起了非同步方法以及做了一些其他處理之後,原始執行緒就中斷並且等非同步方法完成之後再繼續。

class program

return a;

}static void main(string args)

",result);}}

執行結果為

2:輪詢模式(polling)。

原始執行緒定期檢查發起的執行緒是否完成,如果沒有則可以繼續做其他的事情。上**

class program

thread.sleep(3000);

return a;

}static void main(string args)

console.writeline("非同步執行完成");

long result = del.endinvoke(iar);

console.writeline("結果為",result);}}

執行結果為:

3:**模式(callbacl)。

原始執行緒一直執行,無需等待或檢查發起的執行緒是否完成,在發起的執行緒中的引用方法完成之後,發起的執行緒就會呼叫**方法,由**方法在呼叫endinvoke之前處理非同步方法的結構。上**

class program

return a;

}public static void callback(iasyncresult iar)

", r);

}static void main(string args)

}

執行結果為:

**方法的簽名和返回型別必須和asynccallbacl委託型別所描述的形式一致。它需要方法接受乙個iasyncresult作為引數並且返回型別是void,如下:

void asynccallback(iasyncresult iar)

我們有多種方式可以為begininvoke方法提供**方法,由於begininvoke中的callback引數是asynccallback型別的委託,我們可以以委託形式提供,我們也可以只提供**方法名稱,讓編譯器為我們建立委託,兩種形式是等價的。

iasyncresult iar1 = del.begininvoke(5,new asynccallback(callwhendone),null);

iasyncresult iar2 = del.bengininvoke(5,callwhendone,null);

每天進步一點 C 設計模式 工廠模式

工廠模式可以分為簡單工廠與抽象工廠,這兩個都屬於建立型設計模式。那麼下面我們簡單的說說2個之間的不同 1.1 簡單工廠 概念 在實際開發中,需求是變化的,我們所使用的某乙個物件,並不能在編譯時完全確定,需要讓物件延遲建立,這時候,我們就可以使用簡單工廠。因此我們說簡單工廠解決的是 單一物件的建立 問...

C 每天進步一點 事件

事件 如果型別定義了事件成員,那麼型別就可以通知其他物件發生了特定的事情。例如,button類提供了乙個名為click的事件。應用程式中的乙個或者多個物件可能想接收關於這個事件的通知,以便在button被點選後採取操作。下面我們利用乙個例子來加深我們對事件的理解 假定現在要設計乙個電子郵件應用程式,...

每天進步一點 linux vi

1 今天 在乙個 大log 裡查詢 末尾 含有 outofmemoryerror 的錯誤日誌,又學習了一下 vi step1 vi log step2 outofmemoryerror step3 按回車 step4 按 n 或者 n 來查詢。注 以上的step2 也可以 outofmemoryer...