AsyncCodeActivity 名稱易誤解:它並非讓活動「非同步執行」,而是提供同步等待非同步操作 (APM 模式 Begin/End) 完成的機制,將並行操作轉為流程視角的串行等待。建議先閱讀「InvokeMethod 調用方法」篇建立基礎概念。
| 類別 | 繼承 | 回傳值支援 | 關鍵抽象方法 |
|---|---|---|---|
AsyncCodeActivity | Activity | 無 | BeginExecute、EndExecute |
AsyncCodeActivity<TResult> | Activity<TResult> | 有 (EndExecute 回傳) | BeginExecute、EndExecute |
兩者皆覆寫 CacheMetadata,密封類別。

活動實作:使用 FileStream.BeginWrite/EndWrite
protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
{
var fn = context.GetValue(FileName);
var fd = context.GetValue(FileData);
Console.WriteLine("開始寫入檔案");
var fs = File.Open(fn, FileMode.Create);
context.UserState = fs; // 跨階段傳遞狀態
var bytes = Encoding.Unicode.GetBytes(fd);
return fs.BeginWrite(bytes, 0, bytes.Length, callback, state);
}
protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
{
Thread.Sleep(5000); // 模擬額外處理
var fs = (FileStream)context.UserState;
fs.EndWrite(result);
fs.Flush(); fs.Close();
Console.WriteLine("寫入檔案完成");
}
流程與結果:

protected override string EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
{
Thread.Sleep(5000);
var fs = (FileStream)context.UserState;
fs.EndWrite(result);
fs.Flush(); fs.Close();
Console.WriteLine("寫入檔案完成");
return "寫入成功"; // 回傳值自動繫結至 Result
}
流程與結果:

完整範例代碼:下載連結