Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Lua中使用wait操作符_C#_Asynchronous_Lua - Fatal编程技术网

C# 在Lua中使用wait操作符

C# 在Lua中使用wait操作符,c#,asynchronous,lua,C#,Asynchronous,Lua,我正在使用我正在注册的一种方法,但遇到了问题。它是一个返回bool任务的异步方法,这意味着我必须在它之前包含wait操作符。然而,当我将它包含在Lua脚本中时,我得到了一个语法错误 如何在Lua脚本中包含wait操作符 编辑:我的目标是创建一个方法,在设置响应之前停止执行,然后返回响应结果。我相信这必须通过任务来完成,但我不确定如何做到这一点 我的旧代码是: public async Task<bool> SomeMethod() { this.Resp

我正在使用我正在注册的一种方法,但遇到了问题。它是一个返回bool任务的异步方法,这意味着我必须在它之前包含wait操作符。然而,当我将它包含在Lua脚本中时,我得到了一个语法错误

如何在Lua脚本中包含wait操作符

编辑:我的目标是创建一个方法,在设置响应之前停止执行,然后返回响应结果。我相信这必须通过任务来完成,但我不确定如何做到这一点

我的旧代码是:

   public async Task<bool> SomeMethod()
    {
        this.Response = new TaskCompletionSource<bool>();

        return await this.Response.Task;
    }
public异步任务SomeMethod()
{
this.Response=new TaskCompletionSource();
返回等待this.Response.Task;
}

然后,我将设置响应的结果。然而,现在我不再有等待接线员了,我不确定该怎么做。脚本不会在不同的线程上运行。我希望能够在不停止主线程的情况下停止执行

它是一个返回bool任务的异步方法,这意味着我必须在它之前包含wait操作符


您不必在返回任务的方法中使用
wait
——这只是C#的一个特性,它使异步代码的编写更加容易。如果NLua没有类似的功能,您将不得不在没有它的情况下勉强度日,例如,使用
task.ContinueWith
方法向任务添加continuations。重要的是要理解,
await
主要是C#和VB中的一种语言特性。。。它本身不是框架的一部分。

我明白了。你能解释一下ContinueWith的更多内容吗?也许给我举个例子?我想要一种简单的方法,只有在另一个对象设置了响应之后才能返回布尔值类型。@user3717565:如果没有关于环境的更多信息,很难知道如何帮助您。我的意思是,您可以在任务上调用
Result
,但如果异步方法有任何预期在同一线程上运行的回调,那么这很容易导致异步代码死锁。从根本上说,等待任务完成后再返回是一种同步方法,在异步环境中不起作用。基本上,我希望我的Lua脚本在调用“someMethod”时“暂停”,直到另一个对象设置了响应,然后它将返回响应。在我转到Lua之前(从C#和CodeDomProvider),我一直使用TaskCompletionSource,只设置结果并使用Wait操作符。我想在设置响应后返回值。@user3717565:但异步在哪里?如果基本上需要同步方法,为什么要使用异步方法?哪个线程正在执行将在TaskCompletionSource中设置结果的代码?主线程处理所有事情。我需要异步,因为我希望能够在设置响应之前停止脚本,而不停止主线程。在处理任务时,不必使用
wait
,这通常比使用
ContinueWith
显式添加continuations的替代方法更简单。“脚本不会在不同的线程上运行。我希望能够在不停止主线程的情况下停止执行。“所以您只有一个线程,但您想阻止该线程返回,直到发生其他事情?我认为你真的需要后退一步,仔细考虑你想要实现的目标。@JonSkeet使用我的旧代码,在等待响应时,我能够停止脚本,但不能停止主线程。我只想在不使用wait操作符的情况下实现我的旧代码。我该怎么做?我们真的不知道你说的“我的旧代码”是什么意思。。。关于这个问题有很多不清楚的地方。但您需要非常仔细地考虑“暂停脚本”的含义。@JonSkeet“等待运算符应用于异步方法中的任务,以暂停该方法的执行,直到等待的任务完成。该任务表示正在进行的工作。”。正是这个,摘自微软。我的“旧代码”是指我在主帖中使用了代码,它停止了方法的执行(而不是整个线程),然后我只是使用TaskCompletionSource的结果变量为其设置响应。