我在 .NET Framework 4.x 中使用 System.Data.SqlClient.SqlCommand.BeginExecuteReader 進行異步數據庫調用,如下所示:use! reader = Async.FromBeginEnd(CommandBehavior.SingleRow,
(fun (arg,callback,stateObject) -> cmd.BeginExecuteReader(callback,stateObject,arg)), cmd.EndExecuteReader)我正在嘗試將此代碼遷移到 .NET Core 2.2,我發現方法“BeginExecuteReader”和“EndExecuteReader”不再可用,如此處所述。.NET Core 2.2 可以使用什么來提供相同的功能?
1 回答
慕少森
TA貢獻2019條經驗 獲得超9個贊
甚至在 .NET 4.0 中,異步執行命令的首選方法是使用ExecuteXXXAsync返回任務的方法之一。Begin/End方法用于沒有 Task 的早期框架。
在 F# 中,可以在異步工作流中調用ExecuteReaderAsync:
let work = async {
// Open connection
use conn = new SqlConnection(connectionString)
do! conn.OpenAsync() |> Async.AwaitVoidTask
// Execute command
use cmd = new SqlCommand(queryText,conn)
use! reader = cmd.ExecuteReaderAsync() |> Async.AwaitTask
while reader.Read() do
// Consume reader
...
}
work |> Async.RunSynchronously
F# 異步工作流是在 .NET 4.0 的Task類型之前創建的,這就是為什么使用Async.AwaitTask和Async.AwaitVoidTask函數來相互采用的原因
- 1 回答
- 0 關注
- 150 瀏覽
添加回答
舉報
0/150
提交
取消
