IAsyncResult.IsCompleted wird zu schnell TRUE

07/10/2008 - 14:03 von Helmut Woess | Report spam
Hallo,

habe in meiner c#-Applikation einen asynchronen Aufruf einer stored proc
auf einem SQL-Server 2005. Diese liefert am Ende ein Resultset zurück,
inzwischen visualisiere ich den Arbeitsfortschritt.
Funktioniert soweit alles, nur versuche ich das Ende der asynchronen Proc
per IAsyncResult.IsCompleted festzustellen. Ist die Laufzeit kurz, etwa
unter 10 Sekunden, passt es noch. Wird dann die Laufzeit lànger, zB 40
Sekunden, wird IAsyncResult.IsCompleted schon nach 30 Sekunden true und ich
muss dann noch 10 Sekunden warten, bis ich das Resultset zurückkriege.
Habe das schon mit Direktaufruf im ManagementStudio probiert - die stored
proc braucht wirklich 40 Sekunden, es liegt also sicher an diesem Flag.
Kann das am Connect-Statement liegen, dem ich eigentlich nur ein Async=true
zugefügt habe? Und das CommandTimeout habe ich auch auf 600 Sekunden
hochgehoben - bin etwas ratlos. Hat jemand eine Idee?

danke,
Helmut
 

Lesen sie die antworten

#1 Elmar Boye
09/10/2008 - 10:02 | Warnen spam
Hallo Helmut,

Helmut Woess schrieb:
habe in meiner c#-Applikation einen asynchronen Aufruf einer stored proc
auf einem SQL-Server 2005. Diese liefert am Ende ein Resultset zurück,
inzwischen visualisiere ich den Arbeitsfortschritt.
Funktioniert soweit alles, nur versuche ich das Ende der asynchronen Proc
per IAsyncResult.IsCompleted festzustellen. Ist die Laufzeit kurz, etwa
unter 10 Sekunden, passt es noch. Wird dann die Laufzeit lànger, zB 40
Sekunden, wird IAsyncResult.IsCompleted schon nach 30 Sekunden true und ich
muss dann noch 10 Sekunden warten, bis ich das Resultset zurückkriege.



Wie visualisierst Du und wie sieht der Code (vereinfacht) aus?
Zu BeginExecuteReader gibt es ein relativ brauchbares Beispiel.
Um auszuschliessen das es an der Prozedur liegt, probiere Deine
Code mal mit einer Abwandlung aus von:

CREATE PROC [dbo].[TestAsnycProc]
(
@waits int = 45
)
AS
SET NOCOUNT ON;

WHILE @waits > 0
BEGIN
WAITFOR DELAY '00:00:01';
SET @waits = @waits - 1;
END;

SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers;
RETURN @waits;

womit ich so ein Verhalten nicht reproduzieren konnte.

Gruß Elmar

Ähnliche fragen