So I've managed to bend async to execute code between yields in single thread and thought I'd share
Similar thing can be achieved with `yield return`, but this looks quite better.
Using this concept scripts can be written like this (fake code, just an example):
Code:
private async Task KillMob(Mob mob)
{
mob.Target();
while (mob.Alive)
{
if (mob.Distance > World.Player.MeleeDistance)
await World.Player.MoveTo(mob);
if (!World.Player.IsAttacking(mob))
World.Player.Attack(mob);
Task.Yield();
}
}
[Executable]
public async Task KillAllTheThings()
{
Mob mob;
while ((mob = World.Mobs.Where(m => m.Attackable).OrderBy(m => m.Distance).FirstOrDefault()) != null)
{
await KillMob(mob);
}
Script.Print("Everything is dead");
}
while running only within main thread. Njoy 
Some testing code: https://gist.github.com/anonymous/0a250e25486d1cb16b6b