Browse Source

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.

pull/651/head
Juan Antonio Cano 6 years ago
parent
commit
0edad8f5e6
10 changed files with 45 additions and 73 deletions
  1. +12
    -16
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
  2. +10
    -18
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs
  3. +4
    -6
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs
  4. +11
    -15
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs
  5. +2
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs
  6. +3
    -5
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs
  7. +1
    -4
      src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs
  8. +1
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs
  9. +0
    -2
      src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs
  10. +1
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs

+ 12
- 16
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs View File

@ -18,52 +18,48 @@ namespace eShopOnContainers.Core.Services.Basket
} }
}; };
public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
public Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
{ {
await Task.Delay(10);
if (string.IsNullOrEmpty(guidUser) || string.IsNullOrEmpty(token)) if (string.IsNullOrEmpty(guidUser) || string.IsNullOrEmpty(token))
{ {
return new CustomerBasket();
return Task.FromResult(new CustomerBasket());
} }
return MockCustomBasket;
return Task.FromResult(MockCustomBasket);
} }
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
public Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
{ {
await Task.Delay(10);
if (string.IsNullOrEmpty(token)) if (string.IsNullOrEmpty(token))
{ {
return new CustomerBasket();
return Task.FromResult(new CustomerBasket());
} }
MockCustomBasket = 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)) if (string.IsNullOrEmpty(token))
{ {
return;
return Task.CompletedTask;
} }
if (!string.IsNullOrEmpty(guidUser)) if (!string.IsNullOrEmpty(guidUser))
{ {
MockCustomBasket.Items.Clear(); MockCustomBasket.Items.Clear();
} }
return Task.CompletedTask;
} }
public Task CheckoutAsync(BasketCheckout basketCheckout, string token) public Task CheckoutAsync(BasketCheckout basketCheckout, string token)
{ {
if (string.IsNullOrEmpty(token)) if (string.IsNullOrEmpty(token))
{ {
return Task.FromResult(0);
return Task.CompletedTask;
} }
if (basketCheckout != null) if (basketCheckout != null)
@ -71,7 +67,7 @@ namespace eShopOnContainers.Core.Services.Basket
MockCustomBasket.Items.Clear(); MockCustomBasket.Items.Clear();
} }
return Task.FromResult(0);
return Task.CompletedTask;
} }
} }
} }

+ 10
- 18
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs View File

@ -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" } 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<ObservableCollection<CatalogItem>> GetCatalogAsync()
public Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
{ {
await Task.Delay(10);
return MockCatalog;
return Task.FromResult(MockCatalog);
} }
public async Task<ObservableCollection<CatalogItem>> FilterAsync(int catalogBrandId, int catalogTypeId)
public Task<ObservableCollection<CatalogItem>> FilterAsync(int catalogBrandId, int catalogTypeId)
{ {
await Task.Delay(10);
return MockCatalog
return Task.FromResult(MockCatalog
.Where(c => c.CatalogBrandId == catalogBrandId && .Where(c => c.CatalogBrandId == catalogBrandId &&
c.CatalogTypeId == catalogTypeId) c.CatalogTypeId == catalogTypeId)
.ToObservableCollection();
.ToObservableCollection());
} }
public async Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync()
public Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync()
{ {
await Task.Delay(10);
return MockCatalogBrand;
return Task.FromResult(MockCatalogBrand);
} }
public async Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync()
{
await Task.Delay(10);
return MockCatalogType;
public Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync()
{
return Task.FromResult(MockCatalogType);
} }
} }
} }

+ 4
- 6
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Marketing/CampaignMockService.cs View File

@ -36,16 +36,14 @@ namespace eShopOnContainers.Core.Services.Marketing
} }
}; };
public async Task<ObservableCollection<CampaignItem>> GetAllCampaignsAsync(string token)
public Task<ObservableCollection<CampaignItem>> GetAllCampaignsAsync(string token)
{ {
await Task.Delay(10);
return _mockCampaign;
return Task.FromResult(_mockCampaign);
} }
public async Task<CampaignItem> GetCampaignByIdAsync(int campaignId, string token)
public Task<CampaignItem> 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));
} }
} }
} }

+ 11
- 15
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs View File

@ -72,39 +72,35 @@ namespace eShopOnContainers.Core.Services.Order
Street = "FakeStreet" Street = "FakeStreet"
}; };
public async Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
public Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
{ {
await Task.Delay(10);
if (!string.IsNullOrEmpty(token)) if (!string.IsNullOrEmpty(token))
{ {
return MockOrders
return Task.FromResult(MockOrders
.OrderByDescending(o => o.OrderNumber) .OrderByDescending(o => o.OrderNumber)
.ToObservableCollection();
.ToObservableCollection());
} }
else else
return new ObservableCollection<Models.Orders.Order>();
return Task.FromResult(new ObservableCollection<Models.Orders.Order>());
} }
public async Task<Models.Orders.Order> GetOrderAsync(int orderId, string token)
public Task<Models.Orders.Order> GetOrderAsync(int orderId, string token)
{ {
await Task.Delay(10);
if (!string.IsNullOrEmpty(token)) if (!string.IsNullOrEmpty(token))
return MockOrders
.FirstOrDefault(o => o.OrderNumber.Equals(orderId));
return Task.FromResult(MockOrders
.FirstOrDefault(o => o.OrderNumber.Equals(orderId)));
else 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)) if (!string.IsNullOrEmpty(token))
{ {
MockOrders.Add(newOrder); MockOrders.Add(newOrder);
} }
return Task.CompletedTask;
} }
public BasketCheckout MapOrderToBasket(Models.Orders.Order order) public BasketCheckout MapOrderToBasket(Models.Orders.Order order)


+ 2
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs View File

@ -26,10 +26,9 @@ namespace eShopOnContainers.Core.Services.User
CardSecurityNumber = "1234" CardSecurityNumber = "1234"
}; };
public async Task<UserInfo> GetUserInfoAsync(string authToken)
public Task<UserInfo> GetUserInfoAsync(string authToken)
{ {
await Task.Delay(10);
return MockUserInfo;
return Task.FromResult(MockUserInfo);
} }
} }
} }

+ 3
- 5
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs View File

@ -160,8 +160,6 @@ namespace eShopOnContainers.Core.ViewModels
{ {
try try
{ {
await Task.Delay(10);
isAuthenticated = true; isAuthenticated = true;
} }
catch (Exception ex) catch (Exception ex)
@ -185,17 +183,17 @@ namespace eShopOnContainers.Core.ViewModels
IsBusy = false; IsBusy = false;
} }
private async Task SignInAsync()
private Task SignInAsync()
{ {
IsBusy = true; IsBusy = true;
await Task.Delay(10);
LoginUrl = _identityService.CreateAuthorizationRequest(); LoginUrl = _identityService.CreateAuthorizationRequest();
IsValid = true; IsValid = true;
IsLogin = true; IsLogin = true;
IsBusy = false; IsBusy = false;
return Task.CompletedTask;
} }
private void Register() private void Register()


+ 1
- 4
src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs View File

@ -19,7 +19,6 @@ namespace eShopOnContainers.Droid.Renderers
{ {
public class CustomTabbedPageRenderer : TabbedPageRenderer public class CustomTabbedPageRenderer : TabbedPageRenderer
{ {
private const int DelayBeforeTabAdded = 10;
protected readonly Dictionary<Element, BadgeView> BadgeViews = new Dictionary<Element, BadgeView>(); protected readonly Dictionary<Element, BadgeView> BadgeViews = new Dictionary<Element, BadgeView>();
private TabLayout _tabLayout; private TabLayout _tabLayout;
private LinearLayout _tabStrip; private LinearLayout _tabStrip;
@ -186,10 +185,8 @@ namespace eShopOnContainers.Droid.Renderers
BadgeViews.Remove(e.Element); 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; var page = e.Element as Page;
if (page == null) if (page == null)


+ 1
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.UnitTests/Mocks/MockSettingsService.cs View File

@ -86,7 +86,7 @@ namespace eShopOnContainers.UnitTests.Mocks
} }
_settings[key] = value; _settings[key] = value;
return Task.Delay(10);
return Task.FromResult(false);
} }
T GetValueOrDefaultInternal<T>(string key, T defaultValue = default(T)) T GetValueOrDefaultInternal<T>(string key, T defaultValue = default(T))


+ 0
- 2
src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/LocationServiceImplementation.cs View File

@ -64,7 +64,6 @@ namespace eShopOnContainers.Windows.Services
var status = _locator.LocationStatus; var status = _locator.LocationStatus;
while (status == PositionStatus.Initializing) while (status == PositionStatus.Initializing)
{ {
Task.Delay(10).Wait();
status = _locator.LocationStatus; status = _locator.LocationStatus;
} }
return status != PositionStatus.NotAvailable; return status != PositionStatus.NotAvailable;
@ -78,7 +77,6 @@ namespace eShopOnContainers.Windows.Services
var status = _locator.LocationStatus; var status = _locator.LocationStatus;
while (status == PositionStatus.Initializing) while (status == PositionStatus.Initializing)
{ {
Task.Delay(10).Wait();
status = _locator.LocationStatus; status = _locator.LocationStatus;
} }
return status != PositionStatus.Disabled && status != PositionStatus.NotAvailable; return status != PositionStatus.Disabled && status != PositionStatus.NotAvailable;


+ 1
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs View File

@ -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; var page = e.Element as Page;
if (page == null) if (page == null)
return; return;


Loading…
Cancel
Save