как написать getawaiter для vb.net - PullRequest
0 голосов
/ 23 октября 2018

У меня есть программа на vb.net (VS 2017), использующая платформу 4.7, где функция обрабатывается слишком долго, прерывает прокачку сообщений и вызывает ошибку тайм-аута.Чтобы решить эту проблему, я хочу запустить функцию асинхронно, используя задачи и ожидая.(новый для меня).Я понимаю, что для этого мне нужно создать асинхронную функцию (используя ключевое слово async), которая использует await для вызова другой асинхронной функции, которая затем выполняет обработку.Проблема в том, как сделать мою собственную функцию асинхронной, которая внутренне не использует заранее определенный асинхронный процесс, вызываемый await.Чтобы сделать это, мне нужно, чтобы для моей функции был определен GetAwaiter, чтобы он вызывался с помощью await.Вот где я в тупик.Я искал в Интернете и искал книги, чтобы охватить эту тему, и я подошел коротко.Все веб-примеры написаны на C # (с которым я не очень хорошо знаком), и я не могу обернуться вокруг примеров кода на C #, которые я нашел для создания GetAwaiter.Например, из блога Стивена Тауба есть следующее:

public static TaskAwaiter GetAwaiter(this DateTimeOffset dateTimeOffset) 
{ 
    return (dateTimeOffset – DateTimeOffset.UtcNow).GetAwaiter(); 
}

для создания GetAwaiter для функции DateTimeOffset.Я не понимаю декларативную строку, в частности двойник TaskAwaiter GetAwaiter и содержимое круглых скобок после ключевого слова GetAwaiter.Я действительно думаю, что «this» относится к отправителю в vb, DateTimeOffset - это имя функции, получающей GetAwaiter, а dateTimeOffset - это передаваемое значение, но я не понимаю, какая комбинация имен функций и значений внутри парена.Как эту строку можно переписать в vb?Есть ли хорошие, всесторонние книги, статьи и т. Д., Описывающие функциональность задачи / ожидания - особенно когда вам нужно создать новую асинхронную функцию, которая не была предварительно упакована и включена в состав .net, и написана, включая примеры vb.Я нашел очень информативную презентацию на YouTube от Michael Kennedy, но, как и во всех других примерах, которые я обнаружил, она опирается на предопределенную асинхронную функцию, которую можно вызывать с помощью await.Мне нужно, чтобы моя голова была над водой - в каком направлении находится поверхность?

...