Зависание потока

198
02 февраля 2019, 15:20

Использую стороннюю библиотеку, в которой есть асинхронная функция. Это функция при некоторых условиях может работать некорректно и зависать "навечно". Пытался прерывать задачу с помощью токенов отмены, а также помещал функцию в отдельный поток и пытался "убивать" его Abort'ом. Ничего не помогает.

Разработчик библиотеки признает проблему, но решение к сожалению предложить никакое не может. А создавать альтернативу этой функции я не могу. Что же мне делать?)) Можно конечно игнорировать эти зависания и создавать новые потоки до тех пор, пока все не пройдет гладко. Но это ведь утечки, на сколько я понимаю. Не очень нравится такое.

Есть предположение, что можно создать отдельный процесс, который бы содержал только эту функцию. Тогда даже при зависании функции вроде бы не должно возникнуть проблем с завершением этого процесса. Пойдет ли такой вариант и какие возможные негативные последствия могут возникнуть при таком решении?

Собственно функция открывает в браузере вкладку с авторизацией, затем эту функция ждет, когда я авторизуюсь в ней. И только после этого работа продолжается. Однако если я проигнорирую авторизацию и закрою вкладку или браузер, то функция так и останется в ожидании, потому что, как я понял, она не в состоянии перехватить событие закрывающейся вкладки в браузере.

Вот и функция:

private SheetsService GetSheetsService()
{
    UserCredential credential;
    using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = "google-token";
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            new string[] { SheetsService.Scope.Spreadsheets },
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
    }
    return new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
    });
}
READ ALSO
Вопрос по поводу ввода данных

Вопрос по поводу ввода данных

В C# при вводе любого типа данных, в памяти всегда записывается только строка, я правильно понимаю? Дальше (по необходимости), нужно конвертировать...

213
Почему пропадают данные в памяти при инициализации переменной?

Почему пропадают данные в памяти при инициализации переменной?

Всем приветЯ начинающий разработчик, поэтому попытаюсь объяснить ситуацию как смогу

196
Получить из одного IEnumerable три за один обход

Получить из одного IEnumerable три за один обход

В некотором отчёте нужно отобразить три "кучки" покупателей (условно назовём их "золотыми", "серебряными" и "бронзовыми"):

175