如何使用C#中的Task将值赋给对象的属性

时间:2017-01-04 09:05:41

标签: c# reference task-parallel-library multitasking ref

我有一个模型类,每个属性都使用模型类进行映射。

考虑模型类“ Contact

public class Contact
{
    public Profile profileInfo { get; set; }
    public bool isActive { get; set; }
}

public class Profile
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

任务相关的C#代码是

public void MapContact(ref Contact contactInfo)    
{
    List<Task> taskList = new List<Task>();

    taskList.Add(Task.Factory.StartNew(() =>
    {
        contactInfo.profileInfo = client.GetProfileInfo(1);
    }));

    Task.WaitAll(taskList.ToArray());
}

我收到编译时错误“无法在以下语句中的匿名方法,lambda表达式或查询表达式中使用ref或out参数'contactInfo'

contactInfo.profileInfo = client.GetProfileInfo(1);

请帮助我有效地使用Task而不会出现任何编译时错误。

这里附有截图

enter image description here

1 个答案:

答案 0 :(得分:2)

只需声明相同类型的局部变量Contact,然后将此局部变量传递给该任务

C#代码:

public void MapContact(ref Contact contactInfo)
{
    List<Task> taskList = new List<Task>();

    Contact pro = contactInfo;

    taskList.Add(Task.Factory.StartNew(() => 
        { pro.profileInfo = new Profile() 
            { 
                FirstName = "Stack", 
                LastName = "Overflow" 
            }; 
        }));

    Task.WaitAll(taskList.ToArray());
}

LinqPad输出是 enter image description here