我正在使用Azure功能和AWS .NET库从流中将blob上传到S3。在此传输过程中,我订阅了UploadProgressEvent,它接收传输的字节数和完成百分比。
uploadRequest.UploadProgressEvent +=
new EventHandler<UploadProgressArgs>
(uploadRequest_UploadPartProgressEvent);
在这种情况下,我使用实体框架将字节和百分比记录到数据库中,这样我就可以看到发生了什么。
public void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
{
AppDbContext db = new AppDbContext (ConfigurationManager.ConnectionStrings["name"].ConnectionString);
BlobTriggerLog r = new BlobTriggerLog() { blobName = this.blobName, started = DateTime.Now, awsPercent = e.PercentDone, awsBytesCopied = e.TransferredBytes };
db.BlobTriggerLogs.Add(r);
db.SaveChanges();
transferPercent = e.PercentDone;
}
问题:当我在本地运行该功能时,一切都按计划进行,我得到一个从0-100%完成的日志,显示我的事件被触发到上传结束。但是,当我在Azure中运行该功能时,尽管上传成功完成,但事件在达到100%之前会停止触发。对于大文件(100Mb +),在记录停止之前,它通常会达到80-98%。该功能在Azure中标记为已执行且没有错误。
还有其他人遇到过这个问题吗?
我的通话功能中有一个阻止等待上传达到100%。
while(aws.transferPercent != 100)
{
Task.Delay(TimeSpan.FromSeconds(0.5)).Wait();
}
aws.transfer percent是与我的进度事件在同一个类中的变量。
答案 0 :(得分:0)
That might be becoz you are having bunch of logic in your callback,
public void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs e)
{
// Just perform a log on e.PercentDone and you can see 100% out there.
}
Hope it helps.