Здесь есть две возможности.
Во-первых, вы можете взять этот асинхронный процесс и заблокировать его до завершения, что позволит вам сохранить оператор using. Это подход , предложенный Беном М здесь .
В качестве альтернативы, вы можете удалить оператор using и удалить клиентскую переменную самостоятельно. Это может показаться более громоздким, чем использование синтаксиса компилятора для использования, но оно дает преимущество, позволяя вам поддерживать асинхронное поведение, которым вы в настоящее время пытаетесь воспользоваться в этой ситуации, и устраняет необходимость в блоках. Однако это потребует от вас сохранения переменной и ее утилизации в соответствующем месте (возможно, в конце вашего делегата, но для этого также, вероятно, потребуется проверить ее позже, на тот случай, если делегат никогда не вызывается).
Оператор "using" в C # хорош, но есть ситуации, когда он не подходит, и это может быть одним из них (если вам нужно сохранить асинхронное поведение).