我在javascript中有类似的功能
dothis(variablea, function(somevalue) {
..
});
来自function dothis(variablea, callback) {..}
dothis
因此,当我收到服务器的响应时,我想稍后触发然后回调回调函数。
我将如何在 C# 中实现这样的东西,我看过几个例子,但我想将回调函数直接传递给方法。这可能吗?
我在javascript中有类似的功能
dothis(variablea, function(somevalue) {
..
});
来自function dothis(variablea, callback) {..}
dothis
因此,当我收到服务器的响应时,我想稍后触发然后回调回调函数。
我将如何在 C# 中实现这样的东西,我看过几个例子,但我想将回调函数直接传递给方法。这可能吗?
绝对 - 你基本上想要代表。例如:
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 是一种比回调更方便的方法。
您正在寻找委托和 lambda 表达式:
void DoSomething(string whatever, Action<ResultType> callback) {
callback(...);
}
DoSomething(..., r => ...);
但是,您通常应该返回 a Task<T>
。