Unity中的S3对象获取未正常工作

0

【以下的问题经过翻译处理】 我正在使用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

profile picture
专家
已提问 6 个月前70 查看次数
1 回答
0

【以下的回答经过翻译处理】 这似乎不是AWS SDK特定的问题,而是Unity特定的问题。

在你的“Start”方法中调用“Task”对象的“Wait”,你会阻塞Unity的主线程。因此,Unity引擎无法继续正常工作,可能会导致崩溃,冻结和其他意外行为。您不应该阻塞Unity的主线程。

您可以尝试使用Unity Coroutine等待任务完成,而不是“Task.Wait”。您还可以熟悉Unity中的线程和异步编程模型,因为它们与.NET中的略有不同。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则