Ketika Anda memanggil metode Schedule pekerjaan itu kembali JobHandle. Anda dapat menggunakan JobHandle
dalam kode Anda sebagai ketergantungan untuk pekerjaan lain. Jika pekerjaan tergantung pada hasil pekerjaan lain, Anda dapat melewati JobHandle
pekerjaan pertama sebagai parameter ke metode Schedule
pekerjaan kedua, seperti:
JobHandle firstJobHandle = firstJob.Schedule();
secondJob.Schedule(firstJobHandle);
Note: Semua ketergantungan pekerjaan harus dijadwalkan pada benang kontrol yang sama sebagai pekerjaan itu sendiri.
Jika pekerjaan memiliki banyak ketergantungan, Anda dapat menggunakan metode JobHandle.CombineDependensi untuk menggabungkannya. CombineDependencies
memungkinkan Anda untuk melewati metode Schedule
.
NativeArray<JobHandle> handles = new NativeArray<JobHandle>(numJobs, Allocator.TempJob);
// Populate `handles` with `JobHandles` from multiple scheduled jobs...
JobHandle jh = JobHandle.CombineDependencies(handles);
Gunakan JobHandle
untuk memaksa kode Anda untuk menunggu di benang kontrol untuk pekerjaan Anda untuk menyelesaikan executing. Untuk melakukan ini, sebut metode Complete pada JobHandle
. Pada titik ini, Anda tahu benang kontrol dapat dengan aman mengakses NativeContainer yang pekerjaannya digunakan.
Note: Pekerjaan tidak mulai mengeksekusi ketika Anda menjadwalkannya. Jika Anda menunggu pekerjaan di benang kontrol, dan Anda perlu akses ke data NativeContainer yang pekerjaannya digunakan, Anda dapat memanggil metode JobHandle.Complete
. Metode ini membilas pekerjaan dari cache memori dan memulai proses eksekusi. Memanggil Complete
pada kepemilikan JobHandle
dari jenis NativeContainer
pekerjaan ke benang kontrol. Anda perlu memanggil Complete
pada JobHandle
untuk mengakses jenis NativeContainer
dari benang kontrol lagi. Hal ini juga dimungkinkan untuk mengembalikan kepemilikan ke benang kontrol dengan memanggil Complete
pada JobHandle
yang dari ketergantungan pekerjaan. Misalnya, Anda dapat memanggil Complete
pada jobA
, atau Anda dapat memanggil Complete
pada jobB
yang tergantung pada jobA
. Hasil dari jenis NativeContainer
yang digunakan oleh jobA
aman untuk mengakses pada benang kontrol setelah panggilan ke Complete
.
Jika Anda tidak perlu akses ke data, Anda perlu menyiram batch secara eksplisit. Untuk melakukan ini, sebut metode statis JobHandle.ScheduleBatchedJobs. Perhatikan bahwa memanggil metode ini dapat mempengaruhi kinerja negatif.
Job code:
// Job adding two floating point values together
public struct MyJob : IJob
{
public float a;
public float b;
public NativeArray<float> result;
public void Execute()
{
result[0] = a + b;
}
}
// Job adding one to a value
public struct AddOneJob : IJob
{
public NativeArray<float> result;
public void Execute()
{
result[0] = result[0] + 1;
}
}
Main thread code:
// Create a native array of a single float to store the result in. This example waits for the job to complete
NativeArray<float> result = new NativeArray<float>(1, Allocator.TempJob);
// Setup the data for job #1
MyJob jobData = new MyJob();
jobData.a = 10;
jobData.b = 10;
jobData.result = result;
// Schedule job #1
JobHandle firstHandle = jobData.Schedule();
// Setup the data for job #2
AddOneJob incJobData = new AddOneJob();
incJobData.result = result;
// Schedule job #2
JobHandle secondHandle = incJobData.Schedule(firstHandle);
// Wait for job #2 to complete
secondHandle.Complete();
// All copies of the NativeArray point to the same memory, you can access the result in "your" copy of the NativeArray
float aPlusB = result[0];
// Free the memory allocated by the result array
result.Dispose();
2018–06–15 Sitemap
Sistem Kerja C# terkena Oktober 2018