Skip to content

Commit 3eaa6c0

Browse files
GetAsync
1 parent 4a41002 commit 3eaa6c0

File tree

8 files changed

+55
-6
lines changed

8 files changed

+55
-6
lines changed

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

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

21-
public override Task<VirtualMachine> GetAsync(Context context)
21+
public override Task<VirtualMachine> GetAsync(GetContext context)
2222
=> context
23+
.Context
2324
.CreateCompute()
2425
.VirtualMachines
2526
.GetAsync(ResourceGroup.Name, Name);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System.Collections.Concurrent;
2+
using System.Threading.Tasks;
3+
4+
namespace Microsoft.Azure.Experiments
5+
{
6+
public sealed class GetContext
7+
{
8+
public Context Context { get; }
9+
10+
public GetContext(Context context)
11+
{
12+
Context = context;
13+
}
14+
15+
public async Task<T> GetOrNullAsync<T>(Parameters<T> parameters)
16+
{
17+
var result = await Map.GetOrAdd(
18+
parameters, _ => GetObjectOrNullAsync(parameters));
19+
return (T)result;
20+
}
21+
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+
34+
private ConcurrentDictionary<Parameters, Task<object>> Map { get; }
35+
= new ConcurrentDictionary<Parameters, Task<object>>();
36+
}
37+
}

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

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

30-
public override Task<NetworkInterface> GetAsync(Context context)
30+
public override Task<NetworkInterface> GetAsync(GetContext context)
3131
=> context
32+
.Context
3233
.CreateNetwork()
3334
.NetworkInterfaces
3435
.GetAsync(ResourceGroup.Name, Name);

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

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

16-
public override Task<NetworkSecurityGroup> GetAsync(Context context)
16+
public override Task<NetworkSecurityGroup> GetAsync(GetContext context)
1717
=> context
18+
.Context
1819
.CreateNetwork()
1920
.NetworkSecurityGroups
2021
.GetAsync(ResourceGroup.Name, Name);

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

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

17-
public override Task<PublicIPAddress> GetAsync(Context context)
17+
public override Task<PublicIPAddress> GetAsync(GetContext context)
1818
=> context
19+
.Context
1920
.CreateNetwork()
2021
.PublicIPAddresses
2122
.GetAsync(ResourceGroup.Name, Name);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Threading.Tasks;
22
using Microsoft.Azure.Management.Network.Models;
3+
using System.Linq;
34

45
namespace Microsoft.Azure.Experiments.Network
56
{
@@ -13,5 +14,11 @@ public SubnetParameters(
1314
{
1415
VirtualNetwork = virtualNetwork;
1516
}
17+
18+
public override async Task<Subnet> GetAsync(GetContext context)
19+
{
20+
var virtualNetwork = await context.GetOrNullAsync(VirtualNetwork);
21+
return virtualNetwork?.Subnets.FirstOrDefault(s => s.Name == Name);
22+
}
1623
}
1724
}

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

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

16-
public override Task<VirtualNetwork> GetAsync(Context context)
16+
public override Task<VirtualNetwork> GetAsync(GetContext context)
1717
=> context
18+
.Context
1819
.CreateNetwork()
1920
.VirtualNetworks
2021
.GetAsync(ResourceGroup.Name, Name);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ protected Parameters(string name, IEnumerable<Parameters> parameters)
2727
{
2828
}
2929

30-
public abstract Task<T> GetAsync(Context context);
30+
public abstract Task<T> GetAsync(GetContext context);
3131
}
3232
}

0 commit comments

Comments
 (0)