
# 获取异步IO结果
#### 功能介绍
用于获取async_save、async_load等接口返回的异步Future对象的结果。调用get_result将阻塞，直到异步计算完成，并返回以token为单位的结果对象。
#### 接口约束
- 接口会休眠阻塞，直到异步结果可用。
- 输入必须是CcFuture类型对象，由 async_save/async_load返回。
 
#### 方法定义
```
ContextCaching.get_result(ccfuture)
```
#### 请求参数说明
表1请求参数列表 
| **参数名称** | **参数类型**                                                  | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| ccfuture | [表2] | 是        | **参数解释：** 异步计算返回的Future对象。 **约束限制：** 必须为async_save或async_load等接口返回的CcFuture实例，不能为None。 **取值范围：** 无。 **默认取值：** 无。 |
   
 表2CcFuture 
| **方法名称** | 参数 | 返回结果                                                              | **描述**                                                                                                                                                                                                       |
|:---|:---|:---|:---|
| result   | 无  | [表4] | **参数解释：** 获取异步执行的结果。 **取值范围：** 无。 |
   
#### 返回结果
表3返回结果 
| **类型**                                                            | **说明**                                                                                                                                                                                                                       |
|:---|:---|
| [表4] | **参数解释：** Context Caching访问内存池的执行结果。 **取值范围：** 无。 |
   
 表4CcResult 
| **参数名称** | **参数类型** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| success  | int      | **参数解释：** 请求的批量key读写连续成功的个数。 **约束限制：** 无。 **取值范围：** 0\~请求key的个数。 **默认取值：** 无。 |
| total    | int      | **参数解释：** 请求的批量key总个数。 **约束限制：** 无。 **取值范围：** 请求列表中批量key的个数。 **默认取值：** 无。     |
   
#### 代码样例
本示例用于异步保存KVCache的请求，并获取每个请求的最终执行结果。
1. slot_mapping语义下的保存和加载显存数据，参数：slot_mapping + hashes + offsets
   ```
   # 设置save请求的超时时间
   option = CcKvOption(timeout=5000)
   # 异步保存，获取结果
   block_size = 4
   slot_mapping = [0, 1, 2, 3, 4, 5, 6, 7] 
   hashes = [0xABCD, 0x1234]
   offsets = [4, 4]
   try: 
       fut = cc.async_save(slot_mapping = slot_mapping, hashes = hashes, offsets = offsets, option = option)
       res = cc.get_result(fut) 
       print("async_save(hash) result:", res)
   except EmsException as e: 
       print("async_save(hash) result:", res)
   # 异步读取，获取结果
   try: 
       fut = cc.async_load(slot_mapping = slot_mapping, hashes = hashes, offsets = offsets, option = option)
       res = cc.get_result(fut) 
       print("async_load(hash) result:", res)
   except EmsException as e: 
       print(f"async_load(hash) failed: {e}")
   ```
   
2. chunk_descs 语义下的保存和加载显存数据，参数：hashes + chunk_descs
   ```
   # 设置save请求的超时时间
   option = CcKvOption(timeout=5000)
   # 异步保存，获取结果
   block_size = 4
   hashes = [0xABCD, 0x1234]
   chunk_descs = [[(0, 4),(4, 4)]] 
   try: 
       fut = cc.async_save(hashes = hashes, chunk_descs = chunk_descs, option = option)
       res = cc.get_result(fut) 
       print("async_save(token) result:", res)
   except EmsException as e: 
       print(f"async_save(token) failed: {e}")
   # 异步读取，获取结果
   try: 
       fut = cc.async_load(hashes = hashes, chunk_descs = chunk_descs, option = option)
       res = cc.get_result(fut) 
       print("async_load(token) result:", res)
   except EmsException as e: 
       print(f"async_load(token) failed: {e}")
   ```
   
 
