【问题标题】:Do something periodically while waiting for result of an GetAsync在等待 GetAsync 的结果时定期做一些事情
【发布时间】:2021-09-15 00:55:35
【问题描述】:

我想启动GetAsyncPostAsync,然后在循环中执行某些操作并检查结果。

req1 = client.GetAsync(url_1); // a time consuming request

do
{
    //do something here
    var req2= await client.GetAsync(url_2);
    var result2 = await req2.Content.ReadAsStringAsync();
    
} while (!IsResultReady(req1)); // check if url_1 job is done and stop the loop

var result1 = await req1.Content.ReadAsStringAsync();

【问题讨论】:

  • 您似乎只是忽略了 result2。我认为代码可能已经失去了一些意义。如果我按照您的意图进行操作,那么您可以将 req2 的内容放在单独的线程启动器 tyat 中,然后等待 req1。在等待之后,当 req1 返回它的结果时,使用取消标记停止 req2 线程。

标签: c# wpf asynchronous async-await getasync


【解决方案1】:

这个例子应该能满足你的需要

async Task Main()
{
    var mainTask = MyLongRunningTask();
    // mainTask is already started without await
    do
    {
        await DoSomethingElse();
    } while (!mainTask.IsCompleted);
}

public async Task MyLongRunningTask()
{
    Console.WriteLine("Long Running Task Started");
    
    await Task.Delay(3000); // simulating client.GetAsync(url_1)
    
    Console.WriteLine("Long Running Task Finished");
}

async Task DoSomethingElse()
{
    Console.WriteLine("doing some other tasks");
    await Task.Delay(1000);
}

输出:

Long Running Task Started
doing some other tasks
doing some other tasks
doing some other tasks
Long Running Task Finished

【讨论】:

    猜你喜欢
    • 2020-02-02
    • 2014-10-17
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多