Вы должны войти, чтобы создавать сообщения и темы.

Как в синхронном методе дождаться асинхронный?

Здравствуйте, помогите пожалуйста, нужно написать синхронный метод в котором будет вызываться асинхронный, проблема в том, что Task.Result взаимоблокирует UI, а синхронного метода GetManifestAsync нет

namespace M3U_Editor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
detail("https://www.youtube.com/watch?v=123");
}

public StreamManifest detail(string url)
{
YoutubeClient youtube2 = new YoutubeClient();
try
{
string urltest = Regex.Match(url, "https://www.youtube.com/watch\\?v=(.*)").Groups[1].Value;
if ((urltest == null) || (urltest == "") || (url.Contains('&'))) { return null; }
return youtube2.Videos.Streams.GetManifestAsync(url).Result;
}
catch { return null; }
}
}
}

 

Привет, могу предложить такой вариант:

private async void Button1_Click(object sender, EventArgs e)
        {
            StreamManifest sm = await Detail("https://www.youtube.com/watch?v=123");
            label1.Text = sm.GetVideoStreams().ToArray()[0].Url;
        }

        public async Task<StreamManifest> Detail(string url)
        {
            YoutubeClient youtube2 = new YoutubeClient();
            try
            {
                string urltest = Regex.Match(url, "https://www.youtube.com/watch\\?v=(.*)").Groups[1].Value;
                if ((urltest == null) || (urltest == "") || (url.Contains('&'))) { return null; }
                return await youtube2.Videos.Streams.GetManifestAsync(url);
            }
            catch { return null; }
        }

 

 

Пока что получилось так, может есть какие-то другие варианты?

public StreamManifest detail(string url)
{
    YoutubeClient youtube2 = new YoutubeClient();
    try
    {
        string urltest = Regex.Match(url, "https://www.youtube.com/watch\\?v=(.*)").Groups[1].Value;
        if ((urltest == null) || (urltest == "") || (url.Contains('&'))) { return null; }
        StreamManifest manifest = null;
        Task.Run(()=> { manifest = youtube2.Videos.Streams.GetManifestAsync(url).Result; }).Wait();
        return manifest;
    }
    catch { return null; }
}

 

@no_hammer Привет, спасибо за помощь, но тут я вызываю временно с кнопки, и хотел сделать полностью синхронный метод, с ожиданием асинхронного внутри, вызываться будет также с синхронного метода