milosev.com
  • Home
    • List all categories
    • Sitemap
  • Downloads
    • WebSphere
    • Hitachi902
    • Hospital
    • Kryptonite
    • OCR
    • APK
  • About me
    • Gallery
      • Italy2022
      • Côte d'Azur 2024
    • Curriculum vitae
      • Resume
      • Lebenslauf
    • Social networks
      • Facebook
      • Twitter
      • LinkedIn
      • Xing
      • GitHub
      • Google Maps
      • Sports tracker
    • Adventures planning
  1. You are here:  
  2. Home
  3. C#

Await and async

Details
Written by: Stanko Milosev
Category: C#
Published: 19 February 2022
Last Updated: 13 December 2023
Hits: 2192
  • core
One example of await and async from the book Pro C# 9 with .NET 5: Foundational Principles and Practices in Programming
using System;
using System.Threading;
using System.Threading.Tasks;

namespace AwaitAsyncExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                await MultipleAwaits();
            });

            Console.ReadKey();
        }

        static async Task MultipleAwaits()
        {
            Task task1 = Task.Run(() =>
            {
                Thread.Sleep(2_000);
                Console.WriteLine("Done with first task!");
            });
            Task task2 = Task.Run(() =>
            {
                Thread.Sleep(1_000);
                Console.WriteLine("Done with second task!");
            });
            Task task3 = Task.Run(() =>
            {
                Thread.Sleep(1_000);
                Console.WriteLine("Done with third task!");
            });
            await Task.WhenAll(task1, task2, task3);
        }
    }
}
Another example:
private static readonly Object ThisLock = new Object();

static void Main(string[] args)
{
  Task.Run(async () =>
  {
	await MultipleAwaits();
  });

  Console.ReadKey();
}

static async Task MultipleAwaits()
{
  Task task1 = Task.Run(() =>
  {
	lock (ThisLock)
	{
	  File.AppendAllText("test.txt", "test 1");
	}
  });
  Task task2 = Task.Run(() =>
  {
	lock (ThisLock)
	{
	  File.AppendAllText("test.txt", "test 2");
	}
  });
  Task task3 = Task.Run(() =>
  {
	lock (ThisLock)
	{
	  File.AppendAllText("test.txt", "test 3");
	}
  });
  await Task.WhenAll(task1, task2, task3);
}
Notice:
lock (ThisLock)
{
  File.AppendAllText("test.txt", "test 2");
}
Without lock exception "The process cannot access the file 'test.txt' because it is being used by another process." will be raised.

One more example in Windows forms:

namespace AsyncTest;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        btnStart.Click += DoSomeWork;
    }

    async void DoSomeWork(object sender, EventArgs e)
    {
        label1.Text = "start";
        string text = await DoWait();
        label1.Text = text;
    }

    private Task<string> DoWait()
    {
        Task<string> task1 = Task.Run(() =>
        {
            Thread.Sleep(2_000);
            return Task.FromResult("did it");
        });

        return task1;
    }
}

Master - Detail example

Details
Written by: Stanko Milosev
Category: C#
Published: 21 November 2021
Last Updated: 30 November 2021
Hits: 3024
Here is one my example of in-memory DataTables master - detail relationship.
Create table with code like:
DataTable dtMaster = new DataTable("Master");
In this example I will add Columns without specifying type:
dtMaster.Columns.Add("Id");
Create new row:
DataRow drMaster = dtMaster.NewRow();
drMaster["Id"] = 1;
Add row to DataTable:
dtMaster.Rows.Add(drMaster);
Now details table:
DataTable dtDetail = new DataTable("Details");
dtDetail.Columns.Add("Id");
dtDetail.Columns.Add("FkDetailMasterId");

DataRow drDetail = dtDetail.NewRow();
drDetail["Id"] = 1;
drDetail["FkDetailMasterId"] = 1;
dtDetail.Rows.Add(drDetail);
Create DataSet and add relation:
DataSet ds = new DataSet();

ds.Tables.Add(dtMaster);
ds.Tables.Add(dtDetail);

DataRelation relMasterDetail = new DataRelation("MyRelation"
	, ds.Tables["Master"].Columns["Id"]
	, ds.Tables["Details"].Columns["FkDetailMasterId"]
);

ds.Relations.Add(relMasterDetail);
Example download from here.

Invoke private method with reflection

Details
Written by: Stanko Milosev
Category: C#
Published: 17 October 2021
Last Updated: 07 November 2021
Hits: 2652
I have added a class library, and introduced one private method. Invoke looks like:
MethodInfoClass mic = new MethodInfoClass();

const BindingFlags bindingFlags = BindingFlags.InvokeMethod |
								  BindingFlags.Public |
								  BindingFlags.NonPublic |
								  BindingFlags.Static |
								  BindingFlags.Instance;

System.Reflection.MethodInfo privateTestMethod = typeof(MethodInfoClass).GetMethod("PrivateTestMethod", bindingFlags);

if (privateTestMethod is not null)
{
	string returnFromPrivateTestMethod = (string)privateTestMethod.Invoke(mic, null);
	Console.WriteLine($"privateTestMethod: {returnFromPrivateTestMethod}");
}
Example project download from here.

Example of IEnumerable casting

Details
Written by: Stanko Milosev
Category: C#
Published: 29 August 2021
Last Updated: 29 August 2021
Hits: 2455
As title said:
using System;
using System.Collections;
using System.Linq;

namespace IEnumarable
{
  class Program
  {
    static void Main(string[] args)
    {
      MyIEnumerable myIEnumerable = new MyIEnumerable();

      foreach (string test in myIEnumerable.Cast<string>().ToList())
      {
        Console.WriteLine(test);
      }
    }

    class MyIEnumerable : IEnumerable
    {
      private string _names = "stanko, milosev, elizabeta, lazarevic";

      public IEnumerator GetEnumerator()
      {
        string[] aryNames = _names.Split();

        foreach (string name in aryNames)
        {
          yield return name;
        }
      }
    }
  }
}
POI:
myIEnumerable.Cast().ToList()
  1. Filter XML nodes per value
  2. Few thread examples
  3. Check if GPS position is within radius
  4. Reverse geocoding

Subcategories

WPF

Beginning

Code snippets

NUnit

LINQ

Windows Forms

Page 10 of 39

  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14