Skip to content

Instantly share code, notes, and snippets.

#include <iostream>
#include <windows.h>
#include <processsnapshot.h>
int main()
{
auto processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 40092);
if (processHandle == nullptr)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
<IlcDisableReflection>true</IlcDisableReflection>
</PropertyGroup>
public static Task WhenAllOrFaulted(params Task[] tasks)
{
var faultedContinuations = new Task[tasks.Length];
var faultedTask = new TaskCompletionSource<Task>();
for (int i = 0; i < tasks.Length; i++)
{
faultedContinuations[i] = tasks[i].ContinueWith(t => faultedTask.SetResult(t), TaskContinuationOptions.OnlyOnFaulted);
}
public static Task WhenAllOrFaulted(params Task[] tasks)
{
var faultedContinuations = new Task[tasks.Length];
for (int i = 0; i < tasks.Length; i++)
{
faultedContinuations[i] = tasks[i].ContinueWith(_ => {}, TaskContinuationOptions.OnlyOnFaulted);
}
var faultedTask = Task.WhenAny(faultedContinuations);
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
static void SyncMethod()
{
// Run a garbage collection in 1 second
Task.Delay(1000).ContinueWith(_ => { GC.Collect(); });
var taskCompletionSource = new TaskCompletionSource();
Action myDelegate = () => taskCompletionSource.SetResult();
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
static async Task AsyncMethod()
{
// Run a garbage collection in 1 second
Task.Delay(1000).ContinueWith(_ => { GC.Collect(); });
var taskCompletionSource = new TaskCompletionSource();
Action myDelegate = () => taskCompletionSource.SetResult();
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
static void Test()
{
var obj = new object();
// Run a garbage collection in 1 second
Task.Delay(1000).ContinueWith(_ => { GC.Collect(); });
// As soon as MyNativeMethod is called, there are no more references to obj
MyNativeMethod(new WeakReference(obj));
void Test()
{
var obj = new Object();
DoStuffWithObj(obj);
// At this point, the GC knows the object isn't used anymore and may collect obj
DoStuff();
}
var taskCompletionSource = new TaskCompletionSource();
MyDelegateType myDelegate = () => taskCompletionSource.SetResult();
NativeMethods.MyNativeMethod(myDelegate);
await taskCompletionSource.Task;
GC.KeepAlive(myDelegate);
public unsafe class Getter
{
private delegate*<Obj, SomeStruct*, SomeStruct*> _functionPointer;
public Getter(string propName)
{
var methodInfo = typeof(Obj).GetProperty(propName).GetGetMethod();
_functionPointer = (delegate*<Obj, SomeStruct*, SomeStruct*>)methodInfo.MethodHandle.GetFunctionPointer();
}