Skip to content

Commit b8c75f8

Browse files
GetOrNullAsync
1 parent 3eaa6c0 commit b8c75f8

File tree

9 files changed

+35
-26
lines changed

9 files changed

+35
-26
lines changed

experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachineParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public VirtualMachineParameters(
1818
Ni = ni;
1919
}
2020

21-
public override Task<VirtualMachine> GetAsync(GetContext context)
21+
protected override Task<VirtualMachine> GetAsync(GetContext context)
2222
=> context
2323
.Context
2424
.CreateCompute()

experiments/Azure.Experiments/Azure.Experiments/GetContext.cs

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Concurrent;
1+
using System;
2+
using System.Collections.Concurrent;
23
using System.Threading.Tasks;
34

45
namespace Microsoft.Azure.Experiments
@@ -12,25 +13,13 @@ public GetContext(Context context)
1213
Context = context;
1314
}
1415

15-
public async Task<T> GetOrNullAsync<T>(Parameters<T> parameters)
16+
public async Task<T> GetOrAdd<T>(Parameters<T> parameters, Func<Task<T>> get)
17+
where T : class
1618
{
17-
var result = await Map.GetOrAdd(
18-
parameters, _ => GetObjectOrNullAsync(parameters));
19+
var result = await Map.GetOrAdd(parameters, async _ => await get());
1920
return (T)result;
2021
}
2122

22-
private async Task<object> GetObjectOrNullAsync<T>(Parameters<T> parameters)
23-
{
24-
try
25-
{
26-
return await parameters.GetAsync(this);
27-
}
28-
catch
29-
{
30-
return null;
31-
}
32-
}
33-
3423
private ConcurrentDictionary<Parameters, Task<object>> Map { get; }
3524
= new ConcurrentDictionary<Parameters, Task<object>>();
3625
}

experiments/Azure.Experiments/Azure.Experiments/Network/NetworkInterfaceParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public NetworkInterfaceParameters(
2727
Pia = pia;
2828
}
2929

30-
public override Task<NetworkInterface> GetAsync(GetContext context)
30+
protected override Task<NetworkInterface> GetAsync(GetContext context)
3131
=> context
3232
.Context
3333
.CreateNetwork()

experiments/Azure.Experiments/Azure.Experiments/Network/NetworkSecurityGroupParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public NetworkSecurityGroupParameters(
1313
{
1414
}
1515

16-
public override Task<NetworkSecurityGroup> GetAsync(GetContext context)
16+
protected override Task<NetworkSecurityGroup> GetAsync(GetContext context)
1717
=> context
1818
.Context
1919
.CreateNetwork()

experiments/Azure.Experiments/Azure.Experiments/Network/PublicIpAddressParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public PublicIpAddressParameters(
1414
{
1515
}
1616

17-
public override Task<PublicIPAddress> GetAsync(GetContext context)
17+
protected override Task<PublicIPAddress> GetAsync(GetContext context)
1818
=> context
1919
.Context
2020
.CreateNetwork()

experiments/Azure.Experiments/Azure.Experiments/Network/SubnetParameters.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public SubnetParameters(
1515
VirtualNetwork = virtualNetwork;
1616
}
1717

18-
public override async Task<Subnet> GetAsync(GetContext context)
18+
protected override async Task<Subnet> GetAsync(GetContext context)
1919
{
20-
var virtualNetwork = await context.GetOrNullAsync(VirtualNetwork);
20+
var virtualNetwork = await VirtualNetwork.GetOrNullAsync(context);
2121
return virtualNetwork?.Subnets.FirstOrDefault(s => s.Name == Name);
2222
}
2323
}

experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public VirtualNetworkParameters(
1313
{
1414
}
1515

16-
public override Task<VirtualNetwork> GetAsync(GetContext context)
16+
protected override Task<VirtualNetwork> GetAsync(GetContext context)
1717
=> context
1818
.Context
1919
.CreateNetwork()

experiments/Azure.Experiments/Azure.Experiments/Parameters.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using System.Collections.Generic;
1+
using Microsoft.Rest.Azure;
2+
using System.Collections.Generic;
23
using System.Linq;
4+
using System.Net;
35
using System.Threading.Tasks;
46

57
namespace Microsoft.Azure.Experiments
@@ -21,12 +23,29 @@ protected Parameters(string name, IEnumerable<Parameters> dependencies)
2123
}
2224

2325
public abstract class Parameters<T> : Parameters
26+
where T : class
2427
{
25-
protected Parameters(string name, IEnumerable<Parameters> parameters)
28+
protected Parameters(string name, IEnumerable<Parameters> parameters)
2629
: base(name, parameters)
2730
{
2831
}
2932

30-
public abstract Task<T> GetAsync(GetContext context);
33+
public async Task<T> GetOrNullAsync(GetContext context)
34+
=> await context.GetOrAdd(
35+
this,
36+
async () =>
37+
{
38+
try
39+
{
40+
return await GetAsync(context);
41+
}
42+
catch (CloudException e)
43+
when (e.Response.StatusCode == HttpStatusCode.NotFound)
44+
{
45+
return null;
46+
}
47+
});
48+
49+
protected abstract Task<T> GetAsync(GetContext context);
3150
}
3251
}

experiments/Azure.Experiments/Azure.Experiments/ResourceParameters.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace Microsoft.Azure.Experiments
55
{
66
public abstract class ResourceParameters<T> : Parameters<T>
7+
where T : class
78
{
89
public ResourceGroupParameters ResourceGroup { get; }
910

0 commit comments

Comments
 (0)