Трудно понять из вашего вопроса, в чем проблема.
Вы можете отслеживать, когда операция завершится, установив что-либо в обработчике событий. В вашем примере кода вы устанавливаете contacts
, так что вы можете просто проверить, является ли contacts
null
.
Если вам нужно асинхронное уведомление о завершении, например, событие, которое срабатывает после завершения операции, тогда ... э ... обработать GetContractsCompleted
, потому что это именно то, для чего оно нужно.
Если вам нужно что-то более конкретное (например, WaitHandle
, который сигнализируется, или Task
, который завершается после завершения операции), то это можно сделать, но это немного больше работы.