Execute (null);
if (!IsCompleted) {
- using (var evt = new ManualResetEventSlim ()) {
+ var evt = new ManualResetEventSlim ();
+ try {
RegisterWaitEvent (evt);
result = evt.Wait (millisecondsTimeout, cancellationToken);
+ } finally {
if (!result)
UnregisterWaitEvent (evt);
+ evt.Dispose ();
}
}
}
CheckForNullTasks (tasks);
if (tasks.Length > 0) {
- using (var evt = new ManualResetEventSlim ()) {
+ var evt = new ManualResetEventSlim ();
+ bool result = false;
+ try {
for (int i = 0; i < tasks.Length; i++) {
var t = tasks[i];
if (t.IsCompleted)
t.RegisterWaitEvent (evt);
}
- if (!evt.Wait (millisecondsTimeout, cancellationToken)) {
+ if (!(result = evt.Wait (millisecondsTimeout, cancellationToken)))
+ return -1;
+ } finally {
+ if (!result)
foreach (var t in tasks)
t.UnregisterWaitEvent (evt);
-
- return -1;
- }
+ evt.Dispose ();
}
}