Each class contains only the business logic code, while the aspects will be responsible of intercepting the code in order to inject the cross-cutting concerns.
This is first version of example code.
This is second version. You can find MethodInfo and parameter values in the aspect classes.
Before you run the following C# code, run the below docker code to have a RabbitMQ applicaton locally.
docker run -d –hostname my-rabbit –name some-rabbit -p 8080:15672 -p 5672:5672 rabbitmq:3-management
After run Docker RabbitMQ container, you can reach from http://localhost:8080/ as shown in following picture.
In C#, covariance and contravariance enable implicit reference conversion for array types, delegate types, and generic type arguments. Covariance preserves assignment compatibility and contravariance reverses it.
A generic interface or delegate is called variant if its generic parameters are declared covariant or contravariant. C# enables you to create your own variant interfaces and delegates.
In .NET Framework 4 or newer C# supports covariance and contravariance in generic interfaces and delegates and allows for implicit conversion of generic type parameters.
There are several patterns to call a synchronous method asynchronously as shown below.
1- BeginInvoke and EndInvoke
BeginInvoke and EndInvoke Pattern
As you see that first message written in console is worked in main thread (ThreadID is 1), But, DoWork() method is called asynchronously, so that, second message is worked on different thread (ThreadID is 3).
DoWork() method returns int value and without parameters, so that, BeginInvoke method shows two parameters(callback, @object) as shown in Figure-2
Notice that EndInvoke() method takes asyncResult variable returned by BeginInvoke() method and it also returns int value because of Func delegate in Figure-3.
The following example demonstrate how to copy files from TcpClient to TcpListener on network asycnhronously. While copying files asynchronously, percentage of copied files are also updated asynchronously.
if cancellation is needed, application can be cancelled by Ctrl + c keys.