Как показать данные двух методов асинхронно с использованием асинхронного и ожидания в C # - PullRequest
0 голосов
/ 27 декабря 2018

у меня есть два метода.мне нужно показать два метода данных действий в асинхронном режиме.Я хочу, чтобы первый метод viewbag должен был отображаться на странице просмотра через 3 секунды. Мне нужно показать вторые данные viewbag.на самом деле у меня есть несколько веб-запросов, которые я должен использовать.Я не хочу блокировать поток или просмотр, пока все веб-запросы не будут выполнены. Каждый метод, который я хочу вызвать отдельный API остальных и показать ответ в представлении асинхронно.

код

public async Task<ActionResult> Index()
    {
        Task one =   Method1();
        Task two = Method1();

        return View();
    }

    public async Task Method1()
    {

        ViewBag.method1 = "method1";

    }

    public async Task method2()
    {
        Thread.Sleep(3000);
        ViewBag.method2 = "method2";

    }
}

просмотр

@ViewBag.method1 <hr />
@ViewBag.method2

1 Ответ

0 голосов
/ 27 декабря 2018

Отправка ajax-запроса от клиента на сервер.Часть задержки не относится к серверу и является требованием клиента (если вы не создаете некоторые push-уведомления).

Это веб-приложение, и оно означает, что клиент должен отправить запрос, чтобы получить ответ.Поэтому отправьте запрос на /controller/index и верните представление, показывающее результат от action1 до RenderAction.Затем на стороне клиента через 3 секунды отправьте запрос ajax на /controller/action2, получите ответ и покажите его в каком-то элементе на странице:

HomeController

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }
    [HttpGet]
    public ActionResult Action1()
    {
        return Content("Action 1 result.");
    }
    [HttpGet]
    public ActionResult Action2()
    {
        return Content("Action 2 result.");
    }
}

Индекс

<div id="action1">
    @{Html.RenderAction("action1");}
</div>
<div id="action2">Wait for 3 seconds ...</div>

@section scripts {
    <script>
        $(() => {
            setTimeout(() => {
                $.ajax({
                    url: '/home/action2',
                    type: 'GET',
                    success: (data) => { $('#action2').html(data); },
                    error: () => { alert('Error'); }
                });
            }, 3000);
        });
    </script>
}
...