using System.Threading.Tasks;
public static async Task Main()
var cts = new CancellationTokenSource(3000);
var cancellationToken = cts.Token;
HttpClient httpClient = new HttpClient()
BaseAddress = new System.Uri("https://example.com")
var policy = Policy.HandleResult<HttpResponseMessage>(
onRetry: (response, retryCount) =>
Console.WriteLine($"Got: {response.Result}. Retrying: {retryCount}")
var response = await policy.ExecuteAsync(
httpClient.GetAsync("/", ct),
Console.WriteLine($"Got a response of: {response.StatusCode}");
string firstName = "Alan";
BuildQuery(fieldToSearch, firstName),
Console.WriteLine(runQuery1);
string lastName = "Adams";
$"SEARCH {fieldToSearch}:{lastName}",
Console.WriteLine(runQuery2);
string RunQuery(Func<string, string> func, string fieldToSearch)
return $"Running a query - {func(fieldToSearch)}";
string BuildQuery(string fieldToSearch, string valueToSearchFor)
return $"SEARCH {fieldToSearch}:{valueToSearchFor}";
BuildPerson buildPerson = new BuildPerson();
var resultFromBuildPersonSimple = buildPerson.BuildPersonSimple(
$"The person is {firstName} {lastName}",
Console.WriteLine(resultFromBuildPersonSimple);
var resultFromBuildPersonAdvanced = buildPerson.BuildPersonAdvanced(
(firstName, lastName, age) =>
$"The person is {firstName} {lastName}, aged {age} years",
Console.WriteLine(resultFromBuildPersonAdvanced);
OtherMethods otherMethods = new OtherMethods();
var resultFromOtherMethods = otherMethods.Top(
$"Example 6. Result of a + b ({a} + {b}) is {a + b}",
Console.WriteLine(resultFromOtherMethods);
public class OtherMethods
public string Top(Func<int, int, string> func, int num1)
=> Bottom((x, y) => func(x, y), num1);
public string Bottom(Func<int, int, string> func, int num1)
return func(num1, localNumber);
public string BuildPersonSimple(Func<string, string, string> buildPersonSimpleFunc, string firstName, string lastName)
(firstName, lastName, _) =>
buildPersonSimpleFunc(firstName, lastName),
firstName, lastName, default(int));
public string BuildPersonAdvanced(Func<string, string, int, string> buildPersonAdvancedFunc, string firstName, string lastName, int age)
return $"{buildPersonAdvancedFunc(firstName, lastName, age)}";