Исходя из этого потока , вы можете определить шаблон when_all вручную. Но вам нужно передать каждую задачу в качестве параметра.
Обновление:
Если вы хотите поместить вектор IAsyncAction в метод when_all, вы можете обратиться к этому нить . Например:
MainPage.h
template <typename T>
Windows::Foundation::IAsyncAction when_each(T first, T last)
{
for (; first != last; ++first)
{
co_await *first;
}
}
struct MainPage : MainPageT<MainPage>
{
MainPage();
Windows::Foundation::IAsyncAction wait_for(Windows::Foundation::TimeSpan duration);
Windows::Foundation::IAsyncAction ClickHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& args);
};
MainPage. cpp:
#include <debugapi.h>
using namespace winrt;
using namespace Windows::UI::Xaml;
using namespace std::chrono;
Windows::Foundation::IAsyncAction MainPage::wait_for(Windows::Foundation::TimeSpan duration)
{
co_await duration;
hstring formattedText = L"done" + to_hstring(duration.count());
OutputDebugString(formattedText.c_str());
}
Windows::Foundation::IAsyncAction MainPage::ClickHandler(IInspectable const&, RoutedEventArgs const&)
{
std::vector v{ wait_for(4s), wait_for(2s), wait_for(3s) };
co_await when_each(v.begin(), v.end());
}
Результат вывода:
выполнено 20000000 выполнено 30000000 сделано 40000000
Затем вы можете заменить метод wait_for асинхронными c операциями для его достижения.