AWS re:Post Knowledge Center Feedback Survey
Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
【以下的问题经过翻译处理】 我正在使用AWS SDK .NET for Unity从S3下载zip文件。我刚按照此教程为.NET,实现了获取方法 https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html 但是当我用ReadObjectDataAsync().Wait()调用该方法时,Unity会停止和崩溃,就像在无限循环中一样。这是我的代码,具有不同的名称,但基本相同:
/// <summary> /// Start is called before the first frame update /// </summary> void Start() { customSongsManager = gameObject.GetComponent<CustomSongsManager>(); GetZip(S3SampleFile).Wait(); } /// <summary> /// Get Object from S3 Bucket /// </summary> public async Task GetZip(string pFile) { string folder = "Assets/Audio/Custom/"; try { GetObjectRequest request = new GetObjectRequest { BucketName = S3Bucket, Key = pFile }; using (GetObjectResponse response = await S3Client.GetObjectAsync(request)) using (Stream responseStream = response.ResponseStream) { string title = response.Metadata["x-amz-meta-title"]; // Assume you have "title" as medata added to the object. string contentType = response.Headers["Content-Type"]; Debug.Log("Object metadata, Title: " + title); Debug.Log("Content type: " + contentType); if (responseStream != null) { using (BinaryReader bReader = new BinaryReader(response.ResponseStream)) { byte[] buffer = bReader.ReadBytes((int)response.ResponseStream.Length); File.WriteAllBytes(folder + S3SampleFile, buffer); Debug.Log("Writed all bytes"); StartCoroutine(customSongsManager.ReadDownloadedSong(folder + S3SampleFile)); } } } } catch (AmazonS3Exception e) { // If bucket or object does not exist Debug.Log("Error encountered ***. Message:"+ e.Message + " when reading object"); } catch (Exception e) { Debug.Log("Unknown encountered on server. Message:"+ e.Message + " when reading object"); } }
游戏在此行崩溃: using (GetObjectResponse response
【以下的回答经过翻译处理】 这似乎不是AWS SDK特定的问题,而是Unity特定的问题。
在你的“Start”方法中调用“Task”对象的“Wait”,你会阻塞Unity的主线程。因此,Unity引擎无法继续正常工作,可能会导致崩溃,冻结和其他意外行为。您不应该阻塞Unity的主线程。
您可以尝试使用Unity Coroutine等待任务完成,而不是“Task.Wait”。您还可以熟悉Unity中的线程和异步编程模型,因为它们与.NET中的略有不同。
您未登录。 登录 发布回答。
一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。