C# 异步操作中是否覆盖流?

C# 异步操作中是否覆盖流?,c#,asynchronous,stream,C#,Asynchronous,Stream,下面是我的代码片段,由于缺少部分流,有时会抛出错误。在调试过程中,我可以看到,在处理流之前,它已经被一个新流替换,因此,我认为只有部分流到达下一步。我不熟悉asyncrounus操作,可能使用了错误的术语。据我所知,异步与异步不同 该错误是一个nullreference异常错误,并在datetime?行上抛出?dttest。。。当查看xe时,它只显示xmldoc的第一部分。xml确实存在于托管它的网站上,并且包括网页本身的所有信息元素都是正确的。不能排除这可能是流中的错误,或者流在处理之前被覆盖

下面是我的代码片段,由于缺少部分流,有时会抛出错误。在调试过程中,我可以看到,在处理流之前,它已经被一个新流替换,因此,我认为只有部分流到达下一步。我不熟悉asyncrounus操作,可能使用了错误的术语。据我所知,异步与异步不同

该错误是一个nullreference异常错误,并在datetime?行上抛出?dttest。。。当查看xe时,它只显示xmldoc的第一部分。xml确实存在于托管它的网站上,并且包括网页本身的所有信息元素都是正确的。不能排除这可能是流中的错误,或者流在处理之前被覆盖。这就是代码片段包含更大部分代码的原因

foreach (DataRow row in dt.Rows)
            {
                try
                {
                    await Task.Delay(100);
                    url = row["href"].ToString();
                    k = int.Parse(row["K"].ToString());

                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
                    NetworkCredential nc = new NetworkCredential(customerNC, "");
                    request.Credentials = nc;
                    request.Method = "GET";
                    request.Timeout = 20000;
                    request.Proxy = null;
                    request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                    var response = await Policy
                        .Handle<WebException>()
                        .WaitAndRetry(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (Exception, TimeSpan, context) =>
                        {
                            MessageBox.Show(Exception.Message);
                        })
                        .Execute(async () => (HttpWebResponse)await Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null));

                    Stream stream = response.GetResponseStream();
                    StreamReader strReader = new StreamReader(stream);
                    var text = await strReader.ReadToEndAsync();

                    XNamespace xlink = "http://www.w3.org/1999/xlink";
                    XDocument doc = XDocument.Parse(text);

                    xml = text;

                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        await connection.OpenAsync();

                            if (k == 1)
                            {
                                kid = int.Parse(row["kid"].ToString());
                                string sql = @"     UPDATE dbo." + clientTableID + @"Produkter
                                                SET ProdTrue = 0,
                                                StockTrue = 0,
                                                OptTrue = 0,
                                                CombTrue = 0
                                                WHERE DB_ID = @1
                                                "
                                                    ;

                                using (SqlCommand cmd2 = new SqlCommand(sql, connection))
                                {
                                    cmd2.Parameters.AddWithValue("@1", kid);
                                    await cmd2.ExecuteNonQueryAsync().ConfigureAwait(false);
                                }
                            }

                            foreach (XElement xe in doc.Descendants("product"))
                            {
                                DateTime dt3 = DateTime.Now;
                                SqlDataReader dr;
                                int id = int.Parse(xe.Element("id").Value);
                                SqlCommand sqlQuery = new SqlCommand(@"SELECT db_id, lastupd, prodtrue FROM " + clientTableID + @"produkter WHERE EXISTS (SELECT DB_ID WHERE DB_ID = " + id + ")", connection);
                                DateTime dt2 = DateTime.Now;
                                int dbid = 0;
                                int ProdTrue = 0;

                                DateTime? dttest = Convert.ToDateTime(xe.Element("date_upd").Value);
                                if (dttest != null)
                                {
                                    dt3 = DateTime.Parse(dttest.ToString());
                                }
                                else
                                {
                                    dt3 = DateTime.Now;
                                }
}
foreach(数据行中的数据行)
{
尝试
{
等待任务。延迟(100);
url=行[“href”].ToString();
k=int.Parse(行[“k”].ToString());
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(url);
NetworkCredential nc=新的NetworkCredential(customerNC,“”);
请求。凭据=nc;
request.Method=“GET”;
请求超时=20000;
Proxy=null;
request.ContentType=“application/x-www-form-urlencoded;charset=utf-8”;
var响应=等待策略
.Handle()
.WaitAndRetry(3,retrytry=>TimeSpan.FromSeconds(Math.Pow(2,retrytry)),(异常,TimeSpan,上下文)=>
{
MessageBox.Show(Exception.Message);
})
.Execute(async()=>(HttpWebResponse)wait Task.Factory.fromsync(request.BeginGetResponse,request.EndGetResponse,null));
Stream=response.GetResponseStream();
StreamReader strReader=新的StreamReader(流);
var text=await strReader.ReadToEndAsync();
XXLink=”http://www.w3.org/1999/xlink";
XDocument doc=XDocument.Parse(文本);
xml=文本;
使用(SqlConnection连接=新的SqlConnection(connectionString))
{
等待连接。OpenAsync();
如果(k==1)
{
kid=int.Parse(第[“kid”].ToString()行);
字符串sql=@“更新dbo.+clientTableID+@”Produkter
将ProdTrue设置为0,
StockTrue=0,
OptTrue=0,
CombTrue=0
其中DB_ID=@1
"
;
使用(SqlCommand cmd2=新的SqlCommand(sql,连接))
{
cmd2.Parameters.AddWithValue(“@1”,kid);
await cmd2.ExecuteOnQueryAsync().ConfigureAwait(false);
}
}
foreach(文档子体(“产品”)中的XElement xe)
{
DateTime dt3=DateTime.Now;
SqlDataReader-dr;
int id=int.Parse(xe.Element(“id”).Value);
SqlCommand sqlQuery=new SqlCommand(@“从存在的“+clientTableID+@”produkter中选择db_id,lastupd,prodtrue(选择db_id,其中db_id=“+id+”),连接);
DateTime dt2=DateTime.Now;
int-dbid=0;
int ProdTrue=0;
DateTime?dttest=Convert.ToDateTime(xe.Element(“date\upd”).Value);
if(dttest!=null)
{
dt3=DateTime.Parse(dttest.ToString());
}
其他的
{
dt3=日期时间。现在;
}
}

通过“xml存在”我的意思是它作为一个正确的文档存在,包括托管它的Web服务器上的所有信息。你应该编辑你的问题以添加澄清,而不是发表评论。完成了,感谢你增加了我获得更好答案的机会:)你能断开行
xml=text;
并将xml与你期望的内容进行比较吗?我只是没有根据您的建议,当抛出异常时,它读取项目138,而xml=text读取项目147。