LibGit2Sharp: как сделать Task-Async - PullRequest
0 голосов
/ 06 марта 2019

Привет! Я начал использовать пакет для некоторых очень простых задач, в основном для клонирования репозитория Git-Wiki и последующего извлечения изменений с сервера при необходимости.

Теперь я не вижу никаких методов, соответствующих шаблону Task-Async (TAP).Также в документации я не смог найти ничего, касающегося.

Не могли бы вы дать мне какое-то указание , как обернуть методы LibGit2Sharp в конструкцию TAP? Ссылка на документацию (если я что-то пропустил)или просто сказать мне, какой обратный вызов для подключения к объекту TaskCompletionSource был бы хорош.

Это также не очень помогает, если я новичок в Git, и обычно я делаю только базовые ветвления, слияния, перемещения сЭто.

Для клонирования использую:

Repository.Clone(@"https://MyName@bitbucket.org/MyRepo/MyProject.git/wiki", "repo");

Для вытягивания использую:

using (var repo = new Repository("repo"))
            {
                // Credential information to fetch
                LibGit2Sharp.PullOptions options = new LibGit2Sharp.PullOptions();
                options.FetchOptions = new FetchOptions();                

                var signature = new LibGit2Sharp.Signature(new Identity("myname", "mymail@google.com"), DateTimeOffset.Now);


                Commands.Pull(repo, signature, options);
            }

Заранее спасибо

1 Ответ

2 голосов
/ 07 марта 2019

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

Если вы думаете об использовании Task.Run, не надо. Это просто поменяет поток в пуле потоков на другой с добавленной стоимостью 2 переключения контекста.

Но вы должны пересмотреть весь свой подход к этому. Вам не нужно клонировать репозиторий только для того, чтобы получить содержимое файла. Каждая версия файла имеет уникальный URL. Вы даже можете получить URL-адрес файла для конкретной ветви.

...