explain the design
diff --git a/include/picotls.h b/include/picotls.h
index 0e0e98c..a5a3a90 100644
--- a/include/picotls.h
+++ b/include/picotls.h
@@ -650,7 +650,12 @@
 PTLS_CALLBACK_TYPE(int, emit_certificate, ptls_t *tls, ptls_message_emitter_t *emitter, ptls_key_schedule_t *key_sched,
                    ptls_iovec_t context, int push_status_request, const uint16_t *compress_algos, size_t num_compress_algos);
 /**
- * context object of an async operation (e.g., RSA signature generation)
+ * Context object of an async operation (e.g., RSA signature generation).
+ * When `ptls_handshake` returns `PTLS_ERROR_ASYNC_OPERATION`, it has an associated asynchronous task in flight which is
+ * represented by ``ptls_async_job_t`. The user should obtain the reference to the associated task by calling `ptls_get_async_job`,
+ * then either wait for the file descriptor obtained from `get_fd` to become readable, or set a completion callback and wait for its
+ * invocation. Once notified, the user should invoke `ptls_handshake` again.
+ * Async jobs typically provide support for only one of the two methods.
  */
 typedef struct st_ptls_async_job_t {
     void (*destroy_)(struct st_ptls_async_job_t *self);