使用async方法返回的Task对象来取消async操作。Task对象具有Cancel属性,可以用于请求取消Task。

private async Task MyAsyncFunction()
{try{// 开始执行异步操作await Task.Delay(1000);}catch (TaskCanceledException){// 异步操作被取消}
}// 调用异步函数
public async void StartMyAsyncFunction()
{Task task = MyAsyncFunction();await Task.Delay(500); // 等待一段时间task.Cancel();
}

在上面的示例中,我们在调用MyAsyncFunction函数后等待了一段时间,并在此之后使用Task对象的Cancel属性来取消异步操作。请注意,这种方法仅适用于可取消的async操作,例如使用CancellationToken的操作。

但这种方式在unity里不能使用,对于使用Task类或async/await语法创建的异步操作,Unity并没有提供直接的Task.Cancel方法。

原因是Unity使用的Mono运行时不支持Task取消操作。这是由于Unity使用的版本比较老,它是基于.NET Framework 3.5开发的。虽然.NET Framework 4.0及更高版本中提供了Task.Cancel方法,但Mono运行时不支持该方法。

如果您需要取消Task异步操作,可以使用CancellationToken。例如,您可以在Task.Run方法中传递一个CancellationToken,然后在异步操作中检查CancellationToken是否已经被取消。如果CancellationToken已经被取消,您可以停止异步操作的执行。

以下是一个使用CancellationToken取消async操作的示例:

using System.Threading;
using System.Threading.Tasks;private CancellationTokenSource cancellationTokenSource;private async Task MyAsyncFunction(CancellationToken cancellationToken)
{try{// 开始执行异步操作await Task.Delay(1000, cancellationToken);}catch (TaskCanceledException){// 异步操作被取消}
}// 调用异步函数
public void StartMyAsyncFunction()
{cancellationTokenSource = new CancellationTokenSource();Task task = MyAsyncFunction(cancellationTokenSource.Token);
}// 取消异步函数
public void StopMyAsyncFunction()
{if (cancellationTokenSource != null){cancellationTokenSource.Cancel();cancellationTokenSource.Dispose();cancellationTokenSource = null;}
}

在上面的示例中,我们定义了一个MyAsyncFunction函数来执行异步操作。MyAsyncFunction函数采用CancellationToken参数,以便可以取消异步操作。在StartMyAsyncFunction函数中,我们使用CancellationTokenSource创建CancellationToken,然后调用MyAsyncFunction函数。在StopMyAsyncFunction函数中,我们检查CancellationTokenSource是否存在,如果存在则取消异步操作。

当调用StopMyAsyncFunction函数时,CancellationTokenSource将发送取消请求,从而停止正在运行的异步操作。如果异步操作已经完成,则无法取消它。
除了使用CancellationToken来取消async操作外,还有其他一些方式可以停止正在运行的async函数。

在async方法中使用while循环,并检查某个条件来终止循环。

private async Task MyAsyncFunction()
{bool isRunning = true;while (isRunning){// 执行某些操作await Task.Delay(1000);if (/* 某些条件满足 */){isRunning = false;}}
}// 调用异步函数
public void StartMyAsyncFunction()
{Task task = MyAsyncFunction();// 在此处执行其他操作
}

在上面的示例中,我们在MyAsyncFunction函数中使用了while循环来执行异步操作,并在满足某些条件时终止循环。请注意,这种方法适用于需要循环执行异步操作的情况,并且不适用于需要执行一次异步操作并停止的情况。

在Unity中,您可以使用CancellationTokenSource和CancellationToken来取消异步操作,就像上面的示例一样。这是一个标准的C#方式,可以在Unity中使用。

Unity还提供了一些自己的异步API,例如UnityWebRequest和AsyncOperation,这些API也提供了一些取消异步操作的方法。以下是使用UnityWebRequest的示例:


using UnityEngine;
using UnityEngine.Networking;
using System.Threading.Tasks;public class Example : MonoBehaviour
{private UnityWebRequest request;// 启动异步请求public async void StartWebRequest(){request = UnityWebRequest.Get("http://www.example.com");request.SendWebRequest();while (!request.isDone){await Task.Delay(10);}}// 取消异步请求public void CancelWebRequest(){if (request != null && !request.isDone){request.Abort();}}
}

在上面的示例中,我们使用UnityWebRequest启动了一个异步请求,并使用isDone属性来检查异步操作是否已完成。我们使用了一个while循环和Task.Delay方法来等待异步操作的完成。在CancelWebRequest方法中,我们使用了request.Abort方法来取消异步请求。

Unity还提供了其他的异步API,如AsyncOperation和Task,您可以根据您的需要选择适合的方法来取消异步操作。

无论使用哪种方法,都需要小心处理异步操作的取消请求。在取消异步操作时,您需要确保所有资源得到正确释放,并避免造成任何不必要的资源泄漏。

[unity] async-awit的函数,怎么才能关闭这个函数呢,现在来解析相关推荐

  1. C语言文件有关的基本知识,以及函数打开与关闭文件!

    " 要成为绝世高手,并非一朝一夕,除非是天生武学奇才.但是这种人-万中无一 " -- 包租婆 ● C语言文件有关的基本知识 01  什么是文件 1.文件有不同的类型,在程序设计中, ...

  2. javascript async awit 和 Promise 概述

    async awit概述 async函数可能包含0个或者多个await表达式.await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝 ...

  3. async awit 异步调用的理解及应用

    async awit 异步调用的理解及应用 async 是"异步"的简写,而 await 可以认为是 async wait 的简写.所以应该很好理解 async 用于申明一个 fu ...

  4. Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭

    AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...

  5. 国家市场监管总局:互联网广告不得等倒计时结束才能关闭

    11月27日消息,昨日,国家市场监管总局发布<互联网广告管理办法(公开征求意见稿)>(以下简称<征求意见稿>)并公开征求意见. 其中,<征求意见稿>要求,以启动播放 ...

  6. android按任意建关闭对话框,Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭...

    AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...

  7. C文件操作——文件的打开(fopen函数)和关闭(fclose函数)

    文章目录: 一:文件的打开(fopen函数) 1.语法 2.参数 3.返回值 4.代码实现 二:文件的关闭(fclose函数) 1.语法 2.参数 3.返回值 4.代码实现 一:文件的打开(fopen ...

  8. Qt关于窗口关闭触发函数/信号

    方法一. 窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出, 当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEve ...

  9. Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭...

    AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个 ...

最新文章

  1. 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP
  2. 关于SQL操作的一些经验
  3. 贝叶斯告诉你,投掷硬币概率可以是90%
  4. 线程池默认多少个线程_我需要多少个线程?
  5. 苏宁易购:公司改选董事 同意聘任张近东为公司名誉董事长
  6. Windows系统好用的文本编辑器
  7. RoboCode 参考代码
  8. python与乐高ev3结合_乐高Ev3嵌入式系统(Python)的图像识别
  9. C语言入门之鸡兔同笼(简易版)
  10. Common Lisp 超规范(译文):3. 编译和求值
  11. 电脑JAVA打开oracle太慢_oracle官网下载jdk跑不动太慢了,给出快速下载方式mac
  12. [Kaggle实战] Titanic 逃生预测 (1) - 项目起步
  13. 转 全国高校信息数据库,全国高校排序数据库
  14. 支付那些事,支付设计遇到的那些坑(一)(聚合支付平台踩过的那些坑)
  15. 简单视频加密【C语言实现】
  16. 罗素的理发师和奥卡姆剃刀
  17. Python函数和装饰器
  18. 修复之前写的模拟I2C程序,增加多总线,时序更精确操作
  19. LCD Backlight 的分析
  20. 三相三线、三相四线、三相五线制区别

热门文章

  1. 关于error handling的一些理解
  2. PS插入文字因选中操作导致文字无法显示
  3. 线性光耦原理与电路设计[HCNR200,HCNR201]
  4. 手机秒变鸿蒙,华为雄心不小!鸿蒙要做PC系统?手机秒变“电脑主机”
  5. 近期很火的PHOTOSHOP特效教程集合
  6. Hibernate中双向一对多关联关系
  7. mysql按时间增量同步_时间戳实现增量数据同步
  8. 狙击小米+高通?余承东为首款7nm麒麟980打Call!
  9. Unity实现磁铁效果
  10. 异动分析--基础指标监控及查因思路