diff --git a/src/CalcManager/UnitConverter.cpp b/src/CalcManager/UnitConverter.cpp index 0548719a..79797fb0 100644 --- a/src/CalcManager/UnitConverter.cpp +++ b/src/CalcManager/UnitConverter.cpp @@ -5,7 +5,6 @@ #include "Command.h" #include "UnitConverter.h" -using namespace concurrency; using namespace std; using namespace UnitConversionManager; @@ -662,21 +661,25 @@ void UnitConverter::SetViewModelCurrencyCallback(_In_ const shared_ptr> UnitConverter::RefreshCurrencyRatios() +future> UnitConverter::RefreshCurrencyRatios() { shared_ptr currencyDataLoader = GetCurrencyConverterDataLoader(); - return create_task([this, currencyDataLoader]() + future loadDataResult; + + if (currencyDataLoader != nullptr) { - if (currencyDataLoader != nullptr) - { - return currencyDataLoader->TryLoadDataFromWebOverrideAsync(); - } - else - { - return task_from_result(false); - } - }).then([this, currencyDataLoader](bool didLoad) + loadDataResult = currencyDataLoader->TryLoadDataFromWebOverrideAsync(); + } + else { + loadDataResult = async([] { return false; }); + } + + shared_future sharedLoadResult = loadDataResult.share(); + return async([this, currencyDataLoader, sharedLoadResult]() + { + sharedLoadResult.wait(); + bool didLoad = sharedLoadResult.get(); wstring timestamp = L""; if (currencyDataLoader != nullptr) { @@ -684,7 +687,7 @@ task> UnitConverter::RefreshCurrencyRatios() } return make_pair(didLoad, timestamp); - }, task_continuation_context::use_default()); + }); } shared_ptr UnitConverter::GetCurrencyConverterDataLoader() diff --git a/src/CalcManager/UnitConverter.h b/src/CalcManager/UnitConverter.h index 4e130d12..b17f24e8 100644 --- a/src/CalcManager/UnitConverter.h +++ b/src/CalcManager/UnitConverter.h @@ -163,9 +163,9 @@ namespace UnitConversionManager virtual std::pair GetCurrencyRatioEquality(_In_ const UnitConversionManager::Unit& unit1, _In_ const UnitConversionManager::Unit& unit2) = 0; virtual std::wstring GetCurrencyTimestamp() = 0; - virtual concurrency::task TryLoadDataFromCacheAsync() = 0; - virtual concurrency::task TryLoadDataFromWebAsync() = 0; - virtual concurrency::task TryLoadDataFromWebOverrideAsync() = 0; + virtual std::future TryLoadDataFromCacheAsync() = 0; + virtual std::future TryLoadDataFromWebAsync() = 0; + virtual std::future TryLoadDataFromWebOverrideAsync() = 0; }; class IUnitConverterVMCallback @@ -194,7 +194,7 @@ namespace UnitConversionManager virtual void SendCommand(Command command) = 0; virtual void SetViewModelCallback(_In_ const std::shared_ptr& newCallback) = 0; virtual void SetViewModelCurrencyCallback(_In_ const std::shared_ptr& newCallback) = 0; - virtual concurrency::task> RefreshCurrencyRatios() = 0; + virtual std::future> RefreshCurrencyRatios() = 0; }; class UnitConverter : public IUnitConverter, public std::enable_shared_from_this @@ -217,7 +217,7 @@ namespace UnitConversionManager void SendCommand(Command command) override; void SetViewModelCallback(_In_ const std::shared_ptr& newCallback) override; void SetViewModelCurrencyCallback(_In_ const std::shared_ptr& newCallback) override; - concurrency::task> RefreshCurrencyRatios() override; + std::future> RefreshCurrencyRatios() override; // IUnitConverter static std::vector StringToVector(const std::wstring& w, const wchar_t * delimiter, bool addRemainder = false); diff --git a/src/CalcManager/pch.h b/src/CalcManager/pch.h index 551efa91..a8155f9d 100644 --- a/src/CalcManager/pch.h +++ b/src/CalcManager/pch.h @@ -24,6 +24,7 @@ #include #include #include +#include #include "win_data_types_cross_platform.h"