#c# #async-await
#c# #async-ожидание
Вопрос:
Я использовал Xabe.FFmpeg для проекта. Задачи, асинхронность и ожидание для меня новы, но я учился. Я пытаюсь выполнить базовое преобразование с помощью Xabe.FFmpeg. Я получаю сообщение об ошибке «не удается дождаться ‘void'».
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void FormMain_Load(object sender, EventArgs e)
{
Run().GetAwaiter().GetResult();
}
private static async Task Run()
{
string inputFileName = @"C:UsersnpsieVideosSample.mkv";
string outputFileName = Path.ChangeExtension(inputFileName, ".mp4");
await FFmpeg.FFmpeg.Conversions.FromSnippet.ToMp4(inputFileName, outputFileName).Start();
}
}
Комментарии:
1.
FormMain_Load
вероятно, должно бытьasync void
, и тогда вы должны ждатьRun
вместо использованияGetAwaiter().GetResult()
Ответ №1:
Вы пытаетесь await
выполнить вызов .Start()
на Task
возвращаемый ToMp4()
. Удалите этот вызов Start()
и дождитесь самого возвращаемого Task
:
await FFmpeg.FFmpeg.Conversions.FromSnippet.ToMp4(inputFileName, outputFileName);
Комментарии:
1. Это тоже была моя первая мысль, но, глядя на документы , Start() можно ожидать.
2. @GazTheDestroyer: Эти документы кажутся немного легкими в деталях. Где документация для
.ToMp4()
? Если она возвращает a,Task
то.Start()
она не подлежит ожиданию . Также возможно, и не беспрецедентно, что в документации библиотеки могут быть ошибки.3. @user3646458 возможно, у вас будет некоторый успех при вызове ее внутри
Task.Run()
. Возможно, библиотека пропустилаConfigureAwait(false)