0

我在javascript中有类似的功能

dothis(variablea, function(somevalue) {
    ..
});

来自function dothis(variablea, callback) {..}

dothis因此,当我收到服务器的响应时,我想稍后触发然后回调回调函数。

我将如何在 C# 中实现这样的东西,我看过几个例子,但我想将回调函数直接传递给方法。这可能吗?

4

2 回答 2

4

绝对 - 你基本上想要代表。例如:

public void DoSomething(string input, Action<int> callback)
{
    // Do something with input
    int result = ...;
    callback(result);
}

然后用这样的方式调用它:

DoSomething("foo", result => Console.WriteLine(result));

(当然,还有其他创建委托实例的方法。)

或者,如果这是一个异步调用,您可能需要考虑使用 C# 5 中的 async/await。例如:

public async Task<int> DoSomethingAsync(string input)
{
    // Do something with input asynchronously
    using (HttpClient client = new HttpClient())
    {
        await ... /* something to do with input */
    }
    int result = ...;
    return result;
}

然后调用者也可以异步使用它:

public async Task FooAsync()
{
    int result1 = await DoSomethingAsync("something");
    int result2 = await AndSomethingElse(result1);
    Console.WriteLine(result2);
}

如果您基本上是在尝试实现异步,那么 async/await 是一种回调更方便的方法。

于 2013-10-15T15:06:23.790 回答
3

您正在寻找委托和 lambda 表达式:

void DoSomething(string whatever, Action<ResultType> callback) {

    callback(...);
}

DoSomething(..., r => ...);

但是,您通常应该返回 a Task<T>

于 2013-10-15T15:05:31.763 回答