异步程序问题

时间:2014-09-05 13:19:55

标签: powershell asynchronous iasyncresult

我试图让我的SQL命令与PowerShell异步运行。要使用SqlCommand类和BeginExecuteNonQuery方法来实现此目的。据我所知,这个方法应该返回IAsyncResult类。但是当我试图检查返回值时,我会看到System.Data.Common.DbAsyncResult类。

请告诉我我做错了什么,或者我在哪里可以读到我的错误,我对编程很陌生。我的代码示例在

之下
$connection = New-Object System.Data.SqlClient.SqlConnection
"addr=tcp:192.168.0.81,1433;Database=ArchiCredit;uid=sa;password=1;Async=true;"
$connection.Open()
$connection.State
$command = New-Object System.Data.SqlClient.SqlCommand ("update clients set fullname = 'ololo' where id = 15", $connection)
$state = $command.BeginExecuteNonQuery()
$state | gm

此脚本的结果是

PS C:\Users\ivanov> F:\AsyncSQL.ps1
Open


TypeName: System.Data.Common.DbAsyncResult

Name        MemberType Definition                    
----        ---------- ----------                    
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()             
GetType     Method     type GetType()                
ToString    Method     string ToString()

1 个答案:

答案 0 :(得分:0)

这很正常。 IAsyncResult界面。类实现了一个接口,并且任何使用该类的人都保证该类将具有该接口指定的所有属性/方法。在这种情况下,我相信DbAsyncResult是一个内部类。也许这就是PowerShell没有向您展示属性的原因。奇怪。

尽管没有看到它的属性,你可以这样等待它:

$state = $command.BeginExecuteNonQuery()
while( -not $state.IsCompleted )
{
    Start-Sleep -Milliseconds 100
}