首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

並發事件:透過 C# 簡化 APM (2) — 同步 vs 非同步模式程式碼對照

     編輯:關於C語言

Figure 1:ApmPatterns 類別節錄


private static void SynchronousPattern() {
    using (FileStream fs = new FileStream(typeof(ApmPatterns).Assembly.Location,
        FileMode.Open, FileAccess.Read, FileShare.Read, 8192, FileOptions.Asynchronous)) {
        Byte[] data = new Byte[fs.Length];
        Int32 bytesRead = fs.Read(data, 0, data.Length);
        ProcessData(data);
    }
}

#region APM Pattern with Multiple Methods
private sealed class ApmData {
    public FileStream m_fs; public Byte[] m_data;
}
private static void ApmPatternWithMultipleMethods() {
    ApmData apmData = new ApmData();
    apmData.m_fs = new FileStream(...);
    apmData.m_data = new Byte[apmData.m_fs.Length];
    apmData.m_fs.BeginRead(apmData.m_data, 0, apmData.m_data.Length, ReadCompleted, apmData);
}
private static void ReadCompleted(IAsyncResult result) {
    ApmData apmData = (ApmData)result.AsyncState;
    Int32 bytesRead = apmData.m_fs.EndRead(result);
    ProcessData(apmData.m_data);
    apmData.m_fs.Close(); // No 'using'
}
#endregion

private static void ApmPatternWithAnonymousMethod() {
    FileStream fs = new FileStream(...);
    Byte[] data = new Byte[fs.Length];
    fs.BeginRead(data, 0, data.Length, delegate(IAsyncResult result) {
        Int32 bytesRead = fs.EndRead(result);
        ProcessData(data);
        fs.Close(); // No 'using'
    }, null);
}

private static void ApmPatternWithLambdaExpression() {
    FileStream fs = new FileStream(...);
    Byte[] data = new Byte[fs.Length];
    fs.BeginRead(data, 0, data.Length, result => {
        Int32 bytesRead = fs.EndRead(result);
        ProcessData(data);
        fs.Close(); // No 'using'
    }, null);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved