From 0edad8f5e66e81a1e316fc2ddbd512d2c5af4bde Mon Sep 17 00:00:00 2001 From: Juan Antonio Cano Date: Thu, 28 Jun 2018 18:09:09 +0200 Subject: [PATCH] Task.Delay(10) removed from mock services, renderers and View models that could cause potential deadlocks and synchronisation issues, in favour of Task.CompletedTask and Task.FromResult. --- .../Services/Basket/BasketMockService.cs | 28 ++++++++----------- .../Services/Catalog/CatalogMockService.cs | 28 +++++++------------ .../Services/Marketing/CampaignMockService.cs | 10 +++---- .../Services/Order/OrderMockService.cs | 26 ++++++++--------- .../Services/User/UserMockService.cs | 5 ++-- .../ViewModels/LoginViewModel.cs | 8 ++---- .../Renderers/CustomTabbedPageRenderer.cs | 5 +--- .../Mocks/MockSettingsService.cs | 2 +- .../Services/LocationServiceImplementation.cs | 2 -- .../Renderers/CustomTabbedPageRenderer.cs | 4 +-- 10 files changed, 45 insertions(+), 73 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs index 8c54a8993..38792bf3e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs @@ -18,52 +18,48 @@ namespace eShopOnContainers.Core.Services.Basket } }; - public async Task GetBasketAsync(string guidUser, string token) + public Task GetBasketAsync(string guidUser, string token) { - await Task.Delay(10); - if (string.IsNullOrEmpty(guidUser) || string.IsNullOrEmpty(token)) { - return new CustomerBasket(); + return Task.FromResult(new CustomerBasket()); } - return MockCustomBasket; + return Task.FromResult(MockCustomBasket); } - public async Task UpdateBasketAsync(CustomerBasket customerBasket, string token) + public Task UpdateBasketAsync(CustomerBasket customerBasket, string token) { - await Task.Delay(10); - if (string.IsNullOrEmpty(token)) { - return new CustomerBasket(); + return Task.FromResult(new CustomerBasket()); } MockCustomBasket = customerBasket; - return MockCustomBasket; + return Task.FromResult(MockCustomBasket); } - public async Task ClearBasketAsync(string guidUser, string token) + public Task ClearBasketAsync(string guidUser, string token) { - await Task.Delay(10); - if (string.IsNullOrEmpty(token)) { - return; + return Task.CompletedTask; } if (!string.IsNullOrEmpty(guidUser)) { MockCustomBasket.Items.Clear(); } + + return Task.CompletedTask; } public Task CheckoutAsync(BasketCheckout basketCheckout, string token) { if (string.IsNullOrEmpty(token)) { - return Task.FromResult(0); + return Task.CompletedTask; } if (basketCheckout != null) @@ -71,7 +67,7 @@ namespace eShopOnContainers.Core.Services.Basket MockCustomBasket.Items.Clear(); } - return Task.FromResult(0); + return Task.CompletedTask; } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs index db6aee837..80935f825 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs @@ -31,35 +31,27 @@ namespace eShopOnContainers.Core.Services.Catalog new CatalogItem { Id = Common.Common.MockCatalogItemId05, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_05.png" : "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 1, CatalogBrand = "Azure", CatalogTypeId = 2, CatalogType = "T-Shirt" } }; - public async Task> GetCatalogAsync() + public Task> GetCatalogAsync() { - await Task.Delay(10); - - return MockCatalog; + return Task.FromResult(MockCatalog); } - public async Task> FilterAsync(int catalogBrandId, int catalogTypeId) + public Task> FilterAsync(int catalogBrandId, int catalogTypeId) { - await Task.Delay(10); - - return MockCatalog + return Task.FromResult(MockCatalog .Where(c => c.CatalogBrandId == catalogBrandId && c.CatalogTypeId == catalogTypeId) - .ToObservableCollection(); + .ToObservableCollection()); } - public async Task> GetCatalogBrandAsync() + public Task> GetCatalogBrandAsync() { - await Task.Delay(10); - - return MockCatalogBrand; + return Task.FromResult(MockCatalogBrand); } - public async Task> GetCatalogTypeAsync() - { - await Task.Delay(10); - - return MockCatalogType; + public Task> GetCatalogTypeAsync() + { + return Task.FromResult(MockCatalogType); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs index fdc7c75fd..e380e64f6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs @@ -36,16 +36,14 @@ namespace eShopOnContainers.Core.Services.Marketing } }; - public async Task> GetAllCampaignsAsync(string token) + public Task> GetAllCampaignsAsync(string token) { - await Task.Delay(10); - return _mockCampaign; + return Task.FromResult(_mockCampaign); } - public async Task GetCampaignByIdAsync(int campaignId, string token) + public Task GetCampaignByIdAsync(int campaignId, string token) { - await Task.Delay(10); - return _mockCampaign.SingleOrDefault(c => c.Id == campaignId); + return Task.FromResult(_mockCampaign.SingleOrDefault(c => c.Id == campaignId)); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs index 185989255..7d4aa8b6d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs @@ -72,39 +72,35 @@ namespace eShopOnContainers.Core.Services.Order Street = "FakeStreet" }; - public async Task> GetOrdersAsync(string token) + public Task> GetOrdersAsync(string token) { - await Task.Delay(10); - if (!string.IsNullOrEmpty(token)) { - return MockOrders + return Task.FromResult(MockOrders .OrderByDescending(o => o.OrderNumber) - .ToObservableCollection(); + .ToObservableCollection()); } else - return new ObservableCollection(); + return Task.FromResult(new ObservableCollection()); } - public async Task GetOrderAsync(int orderId, string token) + public Task GetOrderAsync(int orderId, string token) { - await Task.Delay(10); - if (!string.IsNullOrEmpty(token)) - return MockOrders - .FirstOrDefault(o => o.OrderNumber.Equals(orderId)); + return Task.FromResult(MockOrders + .FirstOrDefault(o => o.OrderNumber.Equals(orderId))); else - return new Models.Orders.Order(); + return Task.FromResult(new Models.Orders.Order()); } - public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token) + public Task CreateOrderAsync(Models.Orders.Order newOrder, string token) { - await Task.Delay(10); - if (!string.IsNullOrEmpty(token)) { MockOrders.Add(newOrder); } + + return Task.CompletedTask; } public BasketCheckout MapOrderToBasket(Models.Orders.Order order) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs index fb75ec03e..317dfcf6b 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs @@ -26,10 +26,9 @@ namespace eShopOnContainers.Core.Services.User CardSecurityNumber = "1234" }; - public async Task GetUserInfoAsync(string authToken) + public Task GetUserInfoAsync(string authToken) { - await Task.Delay(10); - return MockUserInfo; + return Task.FromResult(MockUserInfo); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs index 2ed8cf83c..10d209b0d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs @@ -160,8 +160,6 @@ namespace eShopOnContainers.Core.ViewModels { try { - await Task.Delay(10); - isAuthenticated = true; } catch (Exception ex) @@ -185,17 +183,17 @@ namespace eShopOnContainers.Core.ViewModels IsBusy = false; } - private async Task SignInAsync() + private Task SignInAsync() { IsBusy = true; - await Task.Delay(10); - LoginUrl = _identityService.CreateAuthorizationRequest(); IsValid = true; IsLogin = true; IsBusy = false; + + return Task.CompletedTask; } private void Register() diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs index 2191c2247..97c546a94 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs @@ -19,7 +19,6 @@ namespace eShopOnContainers.Droid.Renderers { public class CustomTabbedPageRenderer : TabbedPageRenderer { - private const int DelayBeforeTabAdded = 10; protected readonly Dictionary BadgeViews = new Dictionary(); private TabLayout _tabLayout; private LinearLayout _tabStrip; @@ -186,10 +185,8 @@ namespace eShopOnContainers.Droid.Renderers BadgeViews.Remove(e.Element); } - private async void OnTabAdded(object sender, ElementEventArgs e) + private void OnTabAdded(object sender, ElementEventArgs e) { - await Task.Delay(DelayBeforeTabAdded); - var page = e.Element as Page; if (page == null) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs index 37bfc125f..363bb717e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs @@ -86,7 +86,7 @@ namespace eShopOnContainers.UnitTests.Mocks } _settings[key] = value; - return Task.Delay(10); + return Task.FromResult(false); } T GetValueOrDefaultInternal(string key, T defaultValue = default(T)) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs index db20dfbef..cbdf29167 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs @@ -64,7 +64,6 @@ namespace eShopOnContainers.Windows.Services var status = _locator.LocationStatus; while (status == PositionStatus.Initializing) { - Task.Delay(10).Wait(); status = _locator.LocationStatus; } return status != PositionStatus.NotAvailable; @@ -78,7 +77,6 @@ namespace eShopOnContainers.Windows.Services var status = _locator.LocationStatus; while (status == PositionStatus.Initializing) { - Task.Delay(10).Wait(); status = _locator.LocationStatus; } return status != PositionStatus.Disabled && status != PositionStatus.NotAvailable; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs index afb244925..56c3d4df5 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs @@ -74,10 +74,8 @@ namespace eShopOnContainers.iOS.Renderers } } - private async void OnTabAdded(object sender, ElementEventArgs e) + private void OnTabAdded(object sender, ElementEventArgs e) { - await Task.Delay(10); - var page = e.Element as Page; if (page == null) return;