参考异步任务

jim*_*zer 4 c# asynchronous async-await windows-store-apps

如何将引用作为参数传递给Windows Store App中的Async方法?
我正在寻找这样的东西:

var a = DoThis(ref obj.value);

public async Task DoThis(ref int value)
{
    value = 10;
}
Run Code Online (Sandbox Code Playgroud)

但是错误:

异步方法不能有ref或out参数

还有别的办法吗?

注意:
我需要传递完全obj.value.此方法将由不同类型的对象,相同类型的对象,一个对象使用,但我将传递obj.val_1,obj.val_2或obj.val_10.所有值都是相同的类型(对于ex string)

Nuf*_*fin 9

如果你不关心对象的一点开销和可能延长的生命周期,你可以通过将setter和getter方法传递给函数来模拟ref行为,如下所示:

public async Task DoStuff(Func<int> getter, Action<int> setter)
{
    var value1 = getter();
    await DoSomeOtherAsyncStuff();
    setter(value1 * value1);
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

await DoStuff(() => obj.Value, x => obj.Value = x);
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 5

您可以直接传递对象本身并在方法内设置相应属性的值:

var a = DoThis(obj);

public async Task DoThis(SomeObject o)
{
    o.value = 10;
}
Run Code Online (Sandbox Code Playgroud)

如果你没有这样的对象,只需编写一个并使用async方法将该对象作为参数:

public class SomeObject
{
    public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 请阅读您收到的错误消息:这不是C#中支持的,除非您自己编写一个支持将ref/out变量传递给`async`方法的编译器,否则我不知道如何解决您的问题.你还希望我告诉你什么?向您展示如何做一些不受支持的事情的工作示例? (7认同)