异步帮助

在这里new69

新成员
已加入
2016年11月28日
留言内容
2
编程经验
Beginner
你好,

我是C#的新手,我需要知道如何将用户信息传递给异步方法。
C#:
//User Class            
 public class User
    {       
        [JsonProperty("username")]
        public string UserName { get; set; }
        [JsonProperty("firstname")]
        public string FirstName { get; set; }
        [JsonProperty("lastname")]        
        public string LastName { get; set; }


 公共异步静态任务<bool> Create(User user)
        {


            var byteArray = Encoding.ASCII.GetBytes($"{Username}:{Password}");
            string load = JsonConvert.SerializeObject(user);
            StringContent c = new StringContent(load, Encoding.UTF8, "application/json");
            string temp = String.Empty;
            using (HttpClient http = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
                http.DefaultRequestHeaders.Add("Api-Key", ApiKey);
                HttpResponseMessage res = http.PutAsync(RESTUrl + "Users", c).Result;
                if (res.IsSuccessStatusCode)
                {


                }
                if (res.Content != null)
                {                   
                    string resContent = res.Content.ReadAsStringAsync().Result;
                    temp = resContent;
                }
                return res.IsSuccessStatusCode;
            }
        }
}     

//On Default Page Code Behind PageLoad
  string uname = HttpContext.Current.User.Identity.Name;
//Info is a separate class that gets the user information
  信息信息=新信息(uname);

//I need to pass that user information (username,firstname, lastname, ect..) to the async method that is on the users class(top)
//This is what I've been trying and is where the confusion is. 
/Create方法采用类型为User的参数。它必须传递用户类型的参数。
bool x = await User.Create(info);

有什么想法我可以做到这一点吗?

谢谢!
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
将数据传递给异步方法与将数据传递给非异步方法完全相同。您只需像往常一样将参数传递给参数即可。例如,如果您具有以下方法:
private void DoSomething(object arg)
{
    // ...
}
您这样称呼它:
DoSomething(someObject);
然后,如果您使用此方法:
private async Task DoSomething(object arg)
{
    // ...
}
那么您将这样称呼它:
await DoSomething(someObject);
调用中唯一的区别是方法名称前的'await'关键字。关于“等待”,基本上意味着"在这里等待,直到此异步方法完成。如果您只是在方法调用之前加上“ await”,那么它的工作原理几乎与任何同步方法一样,尽管仍然有一些优点。在代码中直接带来好处的地方是,直到以后您不需要使用异步方法的结果。在这种情况下,您可以同步调用该方法,即不用'await'关键字,它将返回一个Task。然后,您可以在后台执行“任务”时执行其他工作。完成工作后,您可以等待可能已经完成或仍在工作的任务:
var myTask = DoSomething(someObject);

// Do some other work here that doesn't rely on the result of DoSomething.

await myTask;
您还可以做的是调用多个异步方法,然后等待所有异步方法,这意味着它们将同时执行,并且您的代码将等到它们全部完成为止:
var myTask = DoSomething(someObject);
var myOtherTask = DoSomethingElse(someOtherObject);

await myTask;
await myOtherTask;
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
现在,我知道您已将重要信息放在代码框内,而该信息框已被隐藏,而不是外部。这个问题与异步方法完全无关。问题应该很明显。您说自己,该方法需要一个User对象,因此创建Info对象并将其传递给您有什么用?如果该方法需要一个User对象,则创建一个User对象并将其传递给该方法。
 

在这里new69

新成员
已加入
2016年11月28日
留言内容
2
编程经验
Beginner
感谢回复。
当我尝试传递用户信息时"信息信息=新信息(uname);",等待Provisioning.User.CreatUser(info);" to "公共异步静态任务<bool> Create(User user)" I get an error. "无法从“信息”转换为“用户”。
 
最佳 底部