@SinceMirai("0.39.0") inline fun <reified E : Event, R : Any> CoroutineScope.asyncFromEventOrNull(timeoutMillis: Long, coroutineContext: CoroutineContext = EmptyCoroutineContext, crossinline mapper: suspend E.(E) -> R?): Deferred<R?>
异步监听这个事件, 并尝试从这个事件中获取一个值.
若 mapper 抛出的异常将会被传递给 Deferred.await 抛出.
timeoutMillis - 超时. 单位为毫秒. -1 为不限制
coroutineContext - 额外的 CoroutineContext
mapper - 过滤转换器. 返回非 null 则代表得到了需要的值. syncFromEvent 会返回这个值