Как использовать асинхронную задачу как метод с параметрами - PullRequest
0 голосов
/ 14 мая 2019

Я запутался, когда пытался использовать асинхронную задачу.Все нормально, если я использую этот метод без параметров, но когда я добавляю к нему параметры, он говорит, что не может преобразовать System.Threading.Tasks.Task в System.Func.Так как правильно его использовать и исправить эту ошибку?

Main:

Timers t = new Timers();
public Form1()
{
    InitializeComponent();
    t.StartTimerTemplate(TEMPLATEupdateSong("test", "test", "test"));//error occurs in this line
}

async Task TEMPLATEupdateSong(string url, string sender, string labelName)
{
    string nowPlaying = await getter.getString(url);
    nowPlaying = XDocument.Parse(nowPlaying).ToString();

    var outputLabel = this.Controls.OfType<Label>()
                      .FirstOrDefault(control => control.Name == labelName);

    outputLabel.Invoke(new Action(() =>
        outputLabel.Text = sender + "\n" + nowPlaying
    ));
}

Timers.cs:

public void StartTimerTemplate(Func<Task> updateTemplate)
{
    System.Timers.Timer timer = new System.Timers.Timer(50000);
    timer.AutoReset = true;
    timer.Elapsed += (sender, e) => timer_Elapsed(sender, e, updateTemplate());
    timer.Start();
}

async void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, Task task)
{
    await task;
}

1 Ответ

2 голосов
/ 14 мая 2019

Ваш метод ожидает Func<Task>, а не Task.

 t.StartTimerTemplate(() => TEMPLATEupdateSong("test", "test", "test"));

Или

t.StartTimerTemplate(async () => await TEMPLATEupdateSong("test", "test", "test"));
...