also reverted the azure checker to being multithreaded instead of asynchronous, the async version does nothing but choke on large key counts even with a small semaphore value. if theres any sort of rate limit in place on something then async is slop.
run_in_executor was also causing timeout errors and ignoring caught exceptions so it's been removed and replaced with the old as_completed method. it gets passed to an executor in the end either way so there shouldn't be much of a performance difference, if any.