Provide a unique value, such as a GUID or hash code, in the userState parameter for each call to InvokeAsync(BeginOperationDelegate, array<Object>[]()[], EndOperationDelegate, SendOrPostCallback, Object), and when each operation is completed, your event handler can determine which instance of the operation raised the completion event.